I did try my hand at Blender here
class person {
void greet() {
print_s((char *) "hello, there\\n");
}
}
class bob extends person {
void greet() {
print_s((char *) "hi, i'm bob");
}
}
void main() {
(new class person()).greet();
(new class bob()).greet();
}
.data
label_0_:
.asciiz "hello, there\\n"
label_1_padding:
.space 1
label_2_:
.asciiz "hi, i'm bob"
# STATIC VARIABLES
# VIRTUAL TABLES
# Virtual table for person
label_5_:
.word label_3_
# Virtual table for bob
label_6_:
.word label_4_
.data
.text
.globl main
.data
.text
label_3_:
addi $sp,$sp,-4
sw $fp,0($sp)
add $fp,$zero,$sp
addi $sp,$sp,-4
sw $ra,0($sp)
addi $sp,$fp,-4
addi $sp,$sp,-4
sw $t2,0($sp)
# Start FunCall
# Start StrLiteral
la $t2,label_0_
# End StrLiteral
# Start TypeCast
add $t2,$zero,$t2
# End TypeCast
li $v0,4
add $a0,$zero,$t2
syscall
# End FunCall
label_7_epilog:
lw $t2,0($sp)
addi $sp,$sp,4
addi $sp,$fp,4
lw $ra,-4($fp)
lw $fp,0($fp)
jr $ra
.data
.text
label_4_:
addi $sp,$sp,-4
sw $fp,0($sp)
add $fp,$zero,$sp
addi $sp,$sp,-4
sw $ra,0($sp)
addi $sp,$fp,-4
addi $sp,$sp,-4
sw $t2,0($sp)
# Start FunCall
# Start StrLiteral
la $t2,label_2_
# End StrLiteral
# Start TypeCast
add $t2,$zero,$t2
# End TypeCast
li $v0,4
add $a0,$zero,$t2
syscall
# End FunCall
label_8_epilog:
lw $t2,0($sp)
addi $sp,$sp,4
addi $sp,$fp,4
lw $ra,-4($fp)
lw $fp,0($fp)
jr $ra
.data
.text
main:
addi $sp,$sp,-4
sw $fp,0($sp)
add $fp,$zero,$sp
addi $sp,$sp,-4
sw $ra,0($sp)
addi $sp,$fp,-4
addi $a0,$zero,4
addi $v0,$zero,9
syscall
add $t3,$zero,$v0
la $t2,label_5_
sw $t2,0($t3)
lw $t2,0($t3)
lw $t2,0($t2)
addi $sp,$sp,-4
sw $t3,0($sp)
addi $sp,$sp,0
jalr $t2
addi $sp,$sp,4
addi $a0,$zero,4
addi $v0,$zero,9
syscall
add $t3,$zero,$v0
la $t2,label_6_
sw $t2,0($t3)
lw $t2,0($t3)
lw $t2,0($t2)
addi $sp,$sp,-4
sw $t3,0($sp)
addi $sp,$sp,0
jalr $t2
addi $sp,$sp,4
label_9_epilog:
addi $sp,$fp,4
lw $ra,-4($fp)
lw $fp,0($fp)
li $v0,10
syscall