From 9d36d72ee5da6f778df0bbcef1299535d17fa0d1 Mon Sep 17 00:00:00 2001 From: Torsten Ruger Date: Wed, 4 Jan 2017 21:34:51 +0200 Subject: [PATCH] load arg type directly into the object Was going through the method, but the type is just as constant and saves 2 instructions 4 every call --- lib/register/builtin/kernel.rb | 1 + lib/typed/method_compiler/call_site.rb | 5 +---- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/lib/register/builtin/kernel.rb b/lib/register/builtin/kernel.rb index c7cb08c7..a6540d9b 100644 --- a/lib/register/builtin/kernel.rb +++ b/lib/register/builtin/kernel.rb @@ -17,6 +17,7 @@ module Register message_ind = Register.resolve_to_index( :space , :first_message ) compiler.add_slot_to_reg( "__init__ load 1st message" , space_reg , message_ind , :message) compiler.add_reg_to_slot( "__init__ store Space in message", space_reg , :message , :receiver) + #fixme: should add arg type here, as done in call_site (which this sort of is) exit_label = Register.label("_exit_label for __init__" , "#{compiler.type.object_class.name}.#{compiler.method.name}" ) ret_tmp = compiler.use_reg(:Label) compiler.add_load_constant("__init__ load return", exit_label , ret_tmp) diff --git a/lib/typed/method_compiler/call_site.rb b/lib/typed/method_compiler/call_site.rb index 01ead450..ca52fa1d 100644 --- a/lib/typed/method_compiler/call_site.rb +++ b/lib/typed/method_compiler/call_site.rb @@ -63,10 +63,7 @@ module Typed # next arg type args_reg = use_reg(:Type , method.arguments ) list_reg = use_reg(:NamedList , arguments ) - add_load_constant("#{name} load methods", method , args_reg) - args_type_index = method.get_type().variable_index(:arguments) - raise args_type_index.to_s unless args_type_index == 6 - add_slot_to_reg( "#{name} get args type from method" , args_reg , args_type_index , args_reg ) + add_load_constant("#{name} load arguments type", method.arguments , args_reg) add_slot_to_reg( "#{name} get args from method" , :new_message , :arguments , list_reg ) add_reg_to_slot( "#{name} store args type in args" , args_reg , list_reg , 1 ) end