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