Skip to content

Commit

Permalink
Speed optimizations; insert parameters right into the intermediate_obj.
Browse files Browse the repository at this point in the history
Current score: 25G2
#127
  • Loading branch information
Bystroushaak committed Oct 5, 2019
1 parent ac4c7e3 commit 5499894
Showing 1 changed file with 19 additions and 20 deletions.
39 changes: 19 additions & 20 deletions src/tinySelf/vm/interpreter.py
Original file line number Diff line number Diff line change
Expand Up @@ -199,22 +199,26 @@ def _handle_nonlocal_return(self):
raise ValueError("Nothing left on stack!")


def _put_together_parameters(self, parameter_names, parameters):
# this is actually probably not needed as it allows calling messages
# with parameters they don't have to react to
# if len(parameter_names) < len(parameters):
# raise ValueError("Too many parameters!")
@jit.unroll_safe
def _insert_parameters_into_intermediate_obj(self, intermediate_obj,
parameter_names, parameters):
parameters_len = len(parameters)
parameter_names_len = len(parameter_names)
for i in range(parameter_names_len):
name = parameter_names[i]

# add padding of unspecified parameter values with `nil`
if len(parameter_names) > len(parameters):
for _ in range(len(parameter_names) - len(parameters)):
parameters.append(NIL)
# add padding of unspecified parameter values with `nil`
if i < parameters_len:
value = parameters[i]
else:
value = NIL

parameter_names_len = len(parameter_names)
return [(parameter_names[i], parameters[i])
for i in range(parameter_names_len)]
intermediate_obj.meta_add_slot(name, value)
intermediate_obj.meta_add_slot(
name + ":",
AssignmentPrimitive(intermediate_obj)
)

@jit.unroll_safe
def _create_intermediate_params_obj(self, scope_parent, method_obj,
parameters, prev_scope_parent=None):

Expand Down Expand Up @@ -256,16 +260,11 @@ def _create_intermediate_params_obj(self, scope_parent, method_obj,

intermediate_obj.meta_add_parent("*", parent)

parameter_pairs = self._put_together_parameters(
self._insert_parameters_into_intermediate_obj(
intermediate_obj,
parameter_names=method_obj.parameters,
parameters=parameters
)
for name, value in parameter_pairs:
intermediate_obj.meta_add_slot(name, value)
intermediate_obj.meta_add_slot(
name + ":",
AssignmentPrimitive(intermediate_obj)
)

if method_obj.code_context._params_cache is None:
method_obj.code_context._params_cache = intermediate_obj
Expand Down

0 comments on commit 5499894

Please sign in to comment.