[:class, :HelloView, [:const, :UIView], [:defn, :drawRect, ...]] define internal i32 @"rb_scope__drawRect:__"(i32 %self, i8* nocapture %sel, i32 %rect) { MainBlock: %right_addr.i42 = alloca i32, align 4 %right_addr.i30 = alloca i32, align 4 %right_addr.i = alloca i32, align 4 %argv29 = alloca [4 x i32] %argv29.sub = getelementptr inbounds [4 x i32]* %argv29, i32 0, i32 0 %0 = load i32* @5 %1 = load i8** @6 %2 = call fastcc i32 @vm_ivar_get(i32 %self, i32 %0, i8* %1) switch i32 %2, label %then [ i32 0, label %else i32 4, label %else ] LLVM Ruby AST LLVM IR Assembly… via Rich Kilmer’s RubyConf 2012 Presentation