Skip to content

Instantly share code, notes, and snippets.

@joseanpg
Created December 13, 2012 21:17
Show Gist options
  • Save joseanpg/4279987 to your computer and use it in GitHub Desktop.
Save joseanpg/4279987 to your computer and use it in GitHub Desktop.
-- 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
};
};
.data
.align 2
.globl class_nameTab
.globl Main_protObj
.globl Int_protObj
.globl String_protObj
.globl bool_const0
.globl bool_const1
.globl _int_tag
.globl _bool_tag
.globl _string_tag
_int_tag:
.word 7
_bool_tag:
.word 8
_string_tag:
.word 9
.globl _MemMgr_INITIALIZER
_MemMgr_INITIALIZER:
.word _NoGC_Init
.globl _MemMgr_COLLECTOR
_MemMgr_COLLECTOR:
.word _NoGC_Collect
.globl _MemMgr_TEST
_MemMgr_TEST:
.word 0
.word -1
str_const24:
.word 9
.word 5
.word String_dispTab
.word int_const0
.byte 0
.align 2
.word -1
str_const23:
.word 9
.word 6
.word String_dispTab
.word int_const1
.ascii "Main"
.byte 0
.align 2
.word -1
str_const22:
.word 9
.word 6
.word String_dispTab
.word int_const2
.ascii "String"
.byte 0
.align 2
.word -1
str_const21:
.word 9
.word 6
.word String_dispTab
.word int_const1
.ascii "Bool"
.byte 0
.align 2
.word -1
str_const20:
.word 9
.word 5
.word String_dispTab
.word int_const3
.ascii "Int"
.byte 0
.align 2
.word -1
str_const19:
.word 9
.word 5
.word String_dispTab
.word int_const3
.ascii "Nil"
.byte 0
.align 2
.word -1
str_const18:
.word 9
.word 6
.word String_dispTab
.word int_const1
.ascii "Cons"
.byte 0
.align 2
.word -1
str_const17:
.word 9
.word 7
.word String_dispTab
.word int_const4
.ascii "BookList"
.byte 0
.align 2
.word -1
str_const16:
.word 9
.word 6
.word String_dispTab
.word int_const5
.ascii "Article"
.byte 0
.align 2
.word -1
str_const15:
.word 9
.word 6
.word String_dispTab
.word int_const1
.ascii "Book"
.byte 0
.align 2
.word -1
str_const14:
.word 9
.word 5
.word String_dispTab
.word int_const6
.ascii "IO"
.byte 0
.align 2
.word -1
str_const13:
.word 9
.word 6
.word String_dispTab
.word int_const2
.ascii "Object"
.byte 0
.align 2
.word -1
str_const12:
.word 9
.word 8
.word String_dispTab
.word int_const7
.ascii "<basic class>"
.byte 0
.align 2
.word -1
str_const11:
.word 9
.word 7
.word String_dispTab
.word int_const8
.ascii "PC Magazine"
.byte 0
.align 2
.word -1
str_const10:
.word 9
.word 6
.word String_dispTab
.word int_const5
.ascii "Ulanoff"
.byte 0
.align 2
.word -1
str_const9:
.word 9
.word 9
.word String_dispTab
.word int_const9
.ascii "The Top 100 CD_ROMs"
.byte 0
.align 2
.word -1
str_const8:
.word 9
.word 10
.word String_dispTab
.word int_const10
.ascii "Aho, Sethi, and Ullman"
.byte 0
.align 2
.word -1
str_const7:
.word 9
.word 16
.word String_dispTab
.word int_const11
.ascii "Compilers, Principles, Techniques, and Tools"
.byte 0
.align 2
.word -1
str_const6:
.word 9
.word 12
.word String_dispTab
.word int_const12
.ascii "- dynamic type was Article -\n"
.byte 0
.align 2
.word -1
str_const5:
.word 9
.word 11
.word String_dispTab
.word int_const13
.ascii "- dynamic type was Book -\n"
.byte 0
.align 2
.word -1
str_const4:
.word 9
.word 8
.word String_dispTab
.word int_const7
.ascii "periodical: "
.byte 0
.align 2
.word -1
str_const3:
.word 9
.word 8
.word String_dispTab
.word int_const14
.ascii "book_list.cl"
.byte 0
.align 2
.word -1
str_const2:
.word 9
.word 8
.word String_dispTab
.word int_const14
.ascii "author: "
.byte 0
.align 2
.word -1
str_const1:
.word 9
.word 5
.word String_dispTab
.word int_const15
.ascii "\n"
.byte 0
.align 2
.word -1
str_const0:
.word 9
.word 8
.word String_dispTab
.word int_const14
.ascii "title: "
.byte 0
.align 2
.word -1
int_const15:
.word 7
.word 4
.word Int_dispTab
.word 1
.word -1
int_const14:
.word 7
.word 4
.word Int_dispTab
.word 12
.word -1
int_const13:
.word 7
.word 4
.word Int_dispTab
.word 26
.word -1
int_const12:
.word 7
.word 4
.word Int_dispTab
.word 29
.word -1
int_const11:
.word 7
.word 4
.word Int_dispTab
.word 44
.word -1
int_const10:
.word 7
.word 4
.word Int_dispTab
.word 22
.word -1
int_const9:
.word 7
.word 4
.word Int_dispTab
.word 19
.word -1
int_const8:
.word 7
.word 4
.word Int_dispTab
.word 11
.word -1
int_const7:
.word 7
.word 4
.word Int_dispTab
.word 13
.word -1
int_const6:
.word 7
.word 4
.word Int_dispTab
.word 2
.word -1
int_const5:
.word 7
.word 4
.word Int_dispTab
.word 7
.word -1
int_const4:
.word 7
.word 4
.word Int_dispTab
.word 8
.word -1
int_const3:
.word 7
.word 4
.word Int_dispTab
.word 3
.word -1
int_const2:
.word 7
.word 4
.word Int_dispTab
.word 6
.word -1
int_const1:
.word 7
.word 4
.word Int_dispTab
.word 4
.word -1
int_const0:
.word 7
.word 4
.word Int_dispTab
.word 0
.word -1
bool_const0:
.word 8
.word 4
.word Bool_dispTab
.word 0
.word -1
bool_const1:
.word 8
.word 4
.word Bool_dispTab
.word 1
class_nameTab:
.word str_const13
.word str_const14
.word str_const15
.word str_const16
.word str_const17
.word str_const18
.word str_const19
.word str_const20
.word str_const21
.word str_const22
.word str_const23
class_objTab:
.word Object_protObj
.word Object_init
.word IO_protObj
.word IO_init
.word Book_protObj
.word Book_init
.word Article_protObj
.word Article_init
.word BookList_protObj
.word BookList_init
.word Cons_protObj
.word Cons_init
.word Nil_protObj
.word Nil_init
.word Int_protObj
.word Int_init
.word Bool_protObj
.word Bool_init
.word String_protObj
.word String_init
.word Main_protObj
.word Main_init
Object_dispTab:
.word Object.abort
.word Object.type_name
.word Object.copy
Main_dispTab:
.word Object.abort
.word Object.type_name
.word Object.copy
.word Main.main
String_dispTab:
.word Object.abort
.word Object.type_name
.word Object.copy
.word String.length
.word String.concat
.word String.substr
Bool_dispTab:
.word Object.abort
.word Object.type_name
.word Object.copy
Int_dispTab:
.word Object.abort
.word Object.type_name
.word Object.copy
IO_dispTab:
.word Object.abort
.word Object.type_name
.word Object.copy
.word IO.out_string
.word IO.out_int
.word IO.in_string
.word IO.in_int
BookList_dispTab:
.word Object.abort
.word Object.type_name
.word Object.copy
.word IO.out_string
.word IO.out_int
.word IO.in_string
.word IO.in_int
.word BookList.isNil
.word BookList.cons
.word BookList.car
.word BookList.cdr
.word BookList.print_list
Nil_dispTab:
.word Object.abort
.word Object.type_name
.word Object.copy
.word IO.out_string
.word IO.out_int
.word IO.in_string
.word IO.in_int
.word Nil.isNil
.word BookList.cons
.word BookList.car
.word BookList.cdr
.word Nil.print_list
Cons_dispTab:
.word Object.abort
.word Object.type_name
.word Object.copy
.word IO.out_string
.word IO.out_int
.word IO.in_string
.word IO.in_int
.word Cons.isNil
.word BookList.cons
.word Cons.car
.word Cons.cdr
.word Cons.print_list
.word Cons.init
Book_dispTab:
.word Object.abort
.word Object.type_name
.word Object.copy
.word IO.out_string
.word IO.out_int
.word IO.in_string
.word IO.in_int
.word Book.initBook
.word Book.print
Article_dispTab:
.word Object.abort
.word Object.type_name
.word Object.copy
.word IO.out_string
.word IO.out_int
.word IO.in_string
.word IO.in_int
.word Book.initBook
.word Article.print
.word Article.initArticle
.word -1
Object_protObj:
.word 0
.word 3
.word Object_dispTab
.word -1
Main_protObj:
.word 10
.word 4
.word Main_dispTab
.word 0
.word -1
String_protObj:
.word 9
.word 5
.word String_dispTab
.word int_const0
.word 0
.word -1
Bool_protObj:
.word 8
.word 4
.word Bool_dispTab
.word 0
.word -1
Int_protObj:
.word 7
.word 4
.word Int_dispTab
.word 0
.word -1
IO_protObj:
.word 1
.word 3
.word IO_dispTab
.word -1
BookList_protObj:
.word 4
.word 3
.word BookList_dispTab
.word -1
Nil_protObj:
.word 6
.word 3
.word Nil_dispTab
.word -1
Cons_protObj:
.word 5
.word 5
.word Cons_dispTab
.word 0
.word 0
.word -1
Book_protObj:
.word 2
.word 5
.word Book_dispTab
.word str_const24
.word str_const24
.word -1
Article_protObj:
.word 3
.word 6
.word Article_dispTab
.word str_const24
.word str_const24
.word str_const24
.globl heap_start
heap_start:
.word 0
.text
.globl Main_init
.globl Int_init
.globl String_init
.globl Bool_init
.globl Main.main
Object_init:
addiu $sp $sp -12
sw $fp 12($sp)
sw $s0 8($sp)
sw $ra 4($sp)
addiu $fp $sp 4
move $s0 $a0
move $a0 $s0
lw $fp 12($sp)
lw $s0 8($sp)
lw $ra 4($sp)
addiu $sp $sp 12
jr $ra
Main_init:
addiu $sp $sp -12
sw $fp 12($sp)
sw $s0 8($sp)
sw $ra 4($sp)
addiu $fp $sp 4
move $s0 $a0
jal Object_init
move $a0 $s0
lw $fp 12($sp)
lw $s0 8($sp)
lw $ra 4($sp)
addiu $sp $sp 12
jr $ra
String_init:
addiu $sp $sp -12
sw $fp 12($sp)
sw $s0 8($sp)
sw $ra 4($sp)
addiu $fp $sp 4
move $s0 $a0
jal Object_init
move $a0 $s0
lw $fp 12($sp)
lw $s0 8($sp)
lw $ra 4($sp)
addiu $sp $sp 12
jr $ra
Bool_init:
addiu $sp $sp -12
sw $fp 12($sp)
sw $s0 8($sp)
sw $ra 4($sp)
addiu $fp $sp 4
move $s0 $a0
jal Object_init
move $a0 $s0
lw $fp 12($sp)
lw $s0 8($sp)
lw $ra 4($sp)
addiu $sp $sp 12
jr $ra
Int_init:
addiu $sp $sp -12
sw $fp 12($sp)
sw $s0 8($sp)
sw $ra 4($sp)
addiu $fp $sp 4
move $s0 $a0
jal Object_init
move $a0 $s0
lw $fp 12($sp)
lw $s0 8($sp)
lw $ra 4($sp)
addiu $sp $sp 12
jr $ra
IO_init:
addiu $sp $sp -12
sw $fp 12($sp)
sw $s0 8($sp)
sw $ra 4($sp)
addiu $fp $sp 4
move $s0 $a0
jal Object_init
move $a0 $s0
lw $fp 12($sp)
lw $s0 8($sp)
lw $ra 4($sp)
addiu $sp $sp 12
jr $ra
BookList_init:
addiu $sp $sp -12
sw $fp 12($sp)
sw $s0 8($sp)
sw $ra 4($sp)
addiu $fp $sp 4
move $s0 $a0
jal IO_init
move $a0 $s0
lw $fp 12($sp)
lw $s0 8($sp)
lw $ra 4($sp)
addiu $sp $sp 12
jr $ra
Nil_init:
addiu $sp $sp -12
sw $fp 12($sp)
sw $s0 8($sp)
sw $ra 4($sp)
addiu $fp $sp 4
move $s0 $a0
jal BookList_init
move $a0 $s0
lw $fp 12($sp)
lw $s0 8($sp)
lw $ra 4($sp)
addiu $sp $sp 12
jr $ra
Cons_init:
addiu $sp $sp -12
sw $fp 12($sp)
sw $s0 8($sp)
sw $ra 4($sp)
addiu $fp $sp 4
move $s0 $a0
jal BookList_init
move $a0 $s0
lw $fp 12($sp)
lw $s0 8($sp)
lw $ra 4($sp)
addiu $sp $sp 12
jr $ra
Book_init:
addiu $sp $sp -12
sw $fp 12($sp)
sw $s0 8($sp)
sw $ra 4($sp)
addiu $fp $sp 4
move $s0 $a0
jal IO_init
move $a0 $s0
lw $fp 12($sp)
lw $s0 8($sp)
lw $ra 4($sp)
addiu $sp $sp 12
jr $ra
Article_init:
addiu $sp $sp -12
sw $fp 12($sp)
sw $s0 8($sp)
sw $ra 4($sp)
addiu $fp $sp 4
move $s0 $a0
jal Book_init
move $a0 $s0
lw $fp 12($sp)
lw $s0 8($sp)
lw $ra 4($sp)
addiu $sp $sp 12
jr $ra
Main.main:
addiu $sp $sp -20
sw $fp 20($sp)
sw $s0 16($sp)
sw $ra 12($sp)
addiu $fp $sp 4
move $s0 $a0
la $a0 str_const7
sw $a0 0($sp)
addiu $sp $sp -4
la $a0 str_const8
sw $a0 0($sp)
addiu $sp $sp -4
la $a0 Book_protObj
jal Object.copy
jal Book_init
bne $a0 $zero label0
la $a0 str_const3
li $t1 1
jal _dispatch_abort
label0:
lw $t1 8($a0)
lw $t1 28($t1)
jalr $t1
move $s1 $a0
la $a0 str_const9
sw $a0 0($sp)
addiu $sp $sp -4
la $a0 str_const10
sw $a0 0($sp)
addiu $sp $sp -4
la $a0 str_const11
sw $a0 0($sp)
addiu $sp $sp -4
la $a0 Article_protObj
jal Object.copy
sw $s1 0($fp)
jal Article_init
lw $s1 0($fp)
sw $s1 0($fp)
bne $a0 $zero label1
la $a0 str_const3
li $t1 1
jal _dispatch_abort
label1:
lw $t1 8($a0)
lw $t1 36($t1)
jalr $t1
lw $s1 0($fp)
move $s2 $a0
sw $s2 0($sp)
addiu $sp $sp -4
sw $s1 0($sp)
addiu $sp $sp -4
la $a0 Nil_protObj
jal Object.copy
sw $s1 0($fp)
sw $s2 4($fp)
jal Nil_init
lw $s1 0($fp)
lw $s2 4($fp)
sw $s1 0($fp)
sw $s2 4($fp)
bne $a0 $zero label2
la $a0 str_const3
li $t1 1
jal _dispatch_abort
label2:
lw $t1 8($a0)
lw $t1 32($t1)
jalr $t1
lw $s1 0($fp)
lw $s2 4($fp)
sw $s1 0($fp)
sw $s2 4($fp)
bne $a0 $zero label3
la $a0 str_const3
li $t1 1
jal _dispatch_abort
label3:
lw $t1 8($a0)
lw $t1 32($t1)
jalr $t1
lw $s1 0($fp)
lw $s2 4($fp)
sw $a0 12($s0)
lw $a0 12($s0)
sw $s1 0($fp)
sw $s2 4($fp)
bne $a0 $zero label4
la $a0 str_const3
li $t1 1
jal _dispatch_abort
label4:
lw $t1 8($a0)
lw $t1 44($t1)
jalr $t1
lw $s1 0($fp)
lw $s2 4($fp)
lw $fp 20($sp)
lw $s0 16($sp)
lw $ra 12($sp)
addiu $sp $sp 20
jr $ra
BookList.isNil:
addiu $sp $sp -12
sw $fp 12($sp)
sw $s0 8($sp)
sw $ra 4($sp)
addiu $fp $sp 4
move $s0 $a0
move $a0 $s0
bne $a0 $zero label5
la $a0 str_const3
li $t1 1
jal _dispatch_abort
label5:
lw $t1 8($a0)
lw $t1 0($t1)
jalr $t1
la $a0 bool_const1
lw $fp 12($sp)
lw $s0 8($sp)
lw $ra 4($sp)
addiu $sp $sp 12
jr $ra
BookList.cons:
addiu $sp $sp -16
sw $fp 16($sp)
sw $s0 12($sp)
sw $ra 8($sp)
addiu $fp $sp 4
move $s0 $a0
la $a0 Cons_protObj
jal Object.copy
jal Cons_init
move $s1 $a0
lw $a0 16($fp)
sw $a0 0($sp)
addiu $sp $sp -4
move $a0 $s0
sw $a0 0($sp)
addiu $sp $sp -4
move $a0 $s1
sw $s1 0($fp)
bne $a0 $zero label6
la $a0 str_const3
li $t1 1
jal _dispatch_abort
label6:
lw $t1 8($a0)
lw $t1 48($t1)
jalr $t1
lw $s1 0($fp)
lw $fp 16($sp)
lw $s0 12($sp)
lw $ra 8($sp)
addiu $sp $sp 20
jr $ra
BookList.car:
addiu $sp $sp -12
sw $fp 12($sp)
sw $s0 8($sp)
sw $ra 4($sp)
addiu $fp $sp 4
move $s0 $a0
move $a0 $s0
bne $a0 $zero label7
la $a0 str_const3
li $t1 1
jal _dispatch_abort
label7:
lw $t1 8($a0)
lw $t1 0($t1)
jalr $t1
la $a0 Book_protObj
jal Object.copy
jal Book_init
lw $fp 12($sp)
lw $s0 8($sp)
lw $ra 4($sp)
addiu $sp $sp 12
jr $ra
BookList.cdr:
addiu $sp $sp -12
sw $fp 12($sp)
sw $s0 8($sp)
sw $ra 4($sp)
addiu $fp $sp 4
move $s0 $a0
move $a0 $s0
bne $a0 $zero label8
la $a0 str_const3
li $t1 1
jal _dispatch_abort
label8:
lw $t1 8($a0)
lw $t1 0($t1)
jalr $t1
la $a0 BookList_protObj
jal Object.copy
jal BookList_init
lw $fp 12($sp)
lw $s0 8($sp)
lw $ra 4($sp)
addiu $sp $sp 12
jr $ra
BookList.print_list:
addiu $sp $sp -12
sw $fp 12($sp)
sw $s0 8($sp)
sw $ra 4($sp)
addiu $fp $sp 4
move $s0 $a0
move $a0 $s0
bne $a0 $zero label9
la $a0 str_const3
li $t1 1
jal _dispatch_abort
label9:
lw $t1 8($a0)
lw $t1 0($t1)
jalr $t1
lw $fp 12($sp)
lw $s0 8($sp)
lw $ra 4($sp)
addiu $sp $sp 12
jr $ra
Nil.isNil:
addiu $sp $sp -12
sw $fp 12($sp)
sw $s0 8($sp)
sw $ra 4($sp)
addiu $fp $sp 4
move $s0 $a0
la $a0 bool_const1
lw $fp 12($sp)
lw $s0 8($sp)
lw $ra 4($sp)
addiu $sp $sp 12
jr $ra
Nil.print_list:
addiu $sp $sp -12
sw $fp 12($sp)
sw $s0 8($sp)
sw $ra 4($sp)
addiu $fp $sp 4
move $s0 $a0
la $a0 bool_const1
lw $fp 12($sp)
lw $s0 8($sp)
lw $ra 4($sp)
addiu $sp $sp 12
jr $ra
Cons.isNil:
addiu $sp $sp -12
sw $fp 12($sp)
sw $s0 8($sp)
sw $ra 4($sp)
addiu $fp $sp 4
move $s0 $a0
la $a0 bool_const0
lw $fp 12($sp)
lw $s0 8($sp)
lw $ra 4($sp)
addiu $sp $sp 12
jr $ra
Cons.init:
addiu $sp $sp -12
sw $fp 12($sp)
sw $s0 8($sp)
sw $ra 4($sp)
addiu $fp $sp 4
move $s0 $a0
lw $a0 16($fp)
sw $a0 12($s0)
lw $a0 12($fp)
sw $a0 16($s0)
move $a0 $s0
lw $fp 12($sp)
lw $s0 8($sp)
lw $ra 4($sp)
addiu $sp $sp 20
jr $ra
Cons.car:
addiu $sp $sp -12
sw $fp 12($sp)
sw $s0 8($sp)
sw $ra 4($sp)
addiu $fp $sp 4
move $s0 $a0
lw $a0 12($s0)
lw $fp 12($sp)
lw $s0 8($sp)
lw $ra 4($sp)
addiu $sp $sp 12
jr $ra
Cons.cdr:
addiu $sp $sp -12
sw $fp 12($sp)
sw $s0 8($sp)
sw $ra 4($sp)
addiu $fp $sp 4
move $s0 $a0
lw $a0 16($s0)
lw $fp 12($sp)
lw $s0 8($sp)
lw $ra 4($sp)
addiu $sp $sp 12
jr $ra
Cons.print_list:
addiu $sp $sp -16
sw $fp 16($sp)
sw $s0 12($sp)
sw $ra 8($sp)
addiu $fp $sp 4
move $s0 $a0
lw $a0 12($s0)
bne $a0 $zero label11
la $a0 str_const3
li $t1 1
jal _dispatch_abort
label11:
lw $t1 8($a0)
lw $t1 32($t1)
jalr $t1
bne $a0 $zero label12
la $a0 str_const3
li $t1 1
jal _case_abort2
label12:
lw $t2 0($a0)
blt $t2 3 label13
bgt $t2 3 label13
move $s1 $a0
la $a0 str_const6
sw $a0 0($sp)
addiu $sp $sp -4
move $a0 $s0
sw $s1 0($fp)
bne $a0 $zero label14
la $a0 str_const3
li $t1 1
jal _dispatch_abort
label14:
lw $t1 8($a0)
lw $t1 12($t1)
jalr $t1
lw $s1 0($fp)
b label10
label13:
blt $t2 2 label15
bgt $t2 3 label15
move $s1 $a0
la $a0 str_const5
sw $a0 0($sp)
addiu $sp $sp -4
move $a0 $s0
sw $s1 0($fp)
bne $a0 $zero label16
la $a0 str_const3
li $t1 1
jal _dispatch_abort
label16:
lw $t1 8($a0)
lw $t1 12($t1)
jalr $t1
lw $s1 0($fp)
b label10
label15:
jal _case_abort
label10:
lw $a0 16($s0)
bne $a0 $zero label17
la $a0 str_const3
li $t1 1
jal _dispatch_abort
label17:
lw $t1 8($a0)
lw $t1 44($t1)
jalr $t1
lw $fp 16($sp)
lw $s0 12($sp)
lw $ra 8($sp)
addiu $sp $sp 16
jr $ra
Book.initBook:
addiu $sp $sp -12
sw $fp 12($sp)
sw $s0 8($sp)
sw $ra 4($sp)
addiu $fp $sp 4
move $s0 $a0
lw $a0 16($fp)
sw $a0 12($s0)
lw $a0 12($fp)
sw $a0 16($s0)
move $a0 $s0
lw $fp 12($sp)
lw $s0 8($sp)
lw $ra 4($sp)
addiu $sp $sp 20
jr $ra
Book.print:
addiu $sp $sp -12
sw $fp 12($sp)
sw $s0 8($sp)
sw $ra 4($sp)
addiu $fp $sp 4
move $s0 $a0
la $a0 str_const1
sw $a0 0($sp)
addiu $sp $sp -4
lw $a0 12($s0)
sw $a0 0($sp)
addiu $sp $sp -4
la $a0 str_const0
sw $a0 0($sp)
addiu $sp $sp -4
move $a0 $s0
bne $a0 $zero label18
la $a0 str_const3
li $t1 1
jal _dispatch_abort
label18:
lw $t1 8($a0)
lw $t1 12($t1)
jalr $t1
bne $a0 $zero label19
la $a0 str_const3
li $t1 1
jal _dispatch_abort
label19:
lw $t1 8($a0)
lw $t1 12($t1)
jalr $t1
bne $a0 $zero label20
la $a0 str_const3
li $t1 1
jal _dispatch_abort
label20:
lw $t1 8($a0)
lw $t1 12($t1)
jalr $t1
la $a0 str_const1
sw $a0 0($sp)
addiu $sp $sp -4
lw $a0 16($s0)
sw $a0 0($sp)
addiu $sp $sp -4
la $a0 str_const2
sw $a0 0($sp)
addiu $sp $sp -4
move $a0 $s0
bne $a0 $zero label21
la $a0 str_const3
li $t1 1
jal _dispatch_abort
label21:
lw $t1 8($a0)
lw $t1 12($t1)
jalr $t1
bne $a0 $zero label22
la $a0 str_const3
li $t1 1
jal _dispatch_abort
label22:
lw $t1 8($a0)
lw $t1 12($t1)
jalr $t1
bne $a0 $zero label23
la $a0 str_const3
li $t1 1
jal _dispatch_abort
label23:
lw $t1 8($a0)
lw $t1 12($t1)
jalr $t1
move $a0 $s0
lw $fp 12($sp)
lw $s0 8($sp)
lw $ra 4($sp)
addiu $sp $sp 12
jr $ra
Article.initArticle:
addiu $sp $sp -12
sw $fp 12($sp)
sw $s0 8($sp)
sw $ra 4($sp)
addiu $fp $sp 4
move $s0 $a0
lw $a0 20($fp)
sw $a0 0($sp)
addiu $sp $sp -4
lw $a0 16($fp)
sw $a0 0($sp)
addiu $sp $sp -4
move $a0 $s0
bne $a0 $zero label24
la $a0 str_const3
li $t1 1
jal _dispatch_abort
label24:
lw $t1 8($a0)
lw $t1 28($t1)
jalr $t1
lw $a0 12($fp)
sw $a0 20($s0)
move $a0 $s0
lw $fp 12($sp)
lw $s0 8($sp)
lw $ra 4($sp)
addiu $sp $sp 24
jr $ra
Article.print:
addiu $sp $sp -12
sw $fp 12($sp)
sw $s0 8($sp)
sw $ra 4($sp)
addiu $fp $sp 4
move $s0 $a0
move $a0 $s0
bne $a0 $zero label25
la $a0 str_const3
li $t1 1
jal _dispatch_abort
label25:
la $t1 Book_dispTab
lw $t1 32($t1)
jalr $t1
la $a0 str_const1
sw $a0 0($sp)
addiu $sp $sp -4
lw $a0 20($s0)
sw $a0 0($sp)
addiu $sp $sp -4
la $a0 str_const4
sw $a0 0($sp)
addiu $sp $sp -4
move $a0 $s0
bne $a0 $zero label26
la $a0 str_const3
li $t1 1
jal _dispatch_abort
label26:
lw $t1 8($a0)
lw $t1 12($t1)
jalr $t1
bne $a0 $zero label27
la $a0 str_const3
li $t1 1
jal _dispatch_abort
label27:
lw $t1 8($a0)
lw $t1 12($t1)
jalr $t1
bne $a0 $zero label28
la $a0 str_const3
li $t1 1
jal _dispatch_abort
label28:
lw $t1 8($a0)
lw $t1 12($t1)
jalr $t1
move $a0 $s0
lw $fp 12($sp)
lw $s0 8($sp)
lw $ra 4($sp)
addiu $sp $sp 12
jr $ra
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment