Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/master' into tim/remove-native-l…
Browse files Browse the repository at this point in the history
…ayout
  • Loading branch information
timfel committed May 11, 2016
2 parents 19ec5f9 + 352bdf8 commit 3873f1b
Show file tree
Hide file tree
Showing 4 changed files with 50 additions and 10 deletions.
3 changes: 2 additions & 1 deletion rsqueakvm/primitives/array_stream.py
Expand Up @@ -56,4 +56,5 @@ def func(interp, s_frame, w_receiver, n0, w_value):
if not (isinstance(w_receiver, W_BytesObject) or
isinstance(w_receiver, W_WordsObject)):
raise PrimitiveFailedError
return w_receiver.short_atput0(interp.space, n0, w_value)
w_receiver.short_atput0(interp.space, n0, w_value)
return w_value
14 changes: 6 additions & 8 deletions rsqueakvm/primitives/control.py
Expand Up @@ -255,14 +255,12 @@ def func(interp, s_frame, w_block_ctx, args_w):
@expose_primitive(PERFORM,
no_result=True, clean_stack=False)
def func(interp, s_frame, argcount):
if argcount == 1:
w_selector = s_frame.pop()
w_rcvr = s_frame.top()
return s_frame._sendSelector(
w_selector, 0, interp, w_rcvr,
w_rcvr.class_shadow(interp.space))
else:
raise PrimitiveFailedError
arguments_w = s_frame.pop_and_return_n(argcount - 1)
w_selector = s_frame.pop()
w_rcvr = s_frame.top()
return s_frame._sendSelector(
w_selector, argcount - 1, interp, w_rcvr,
w_rcvr.class_shadow(interp.space), w_arguments=arguments_w)

@expose_primitive(PERFORM_WITH_ARGS,
unwrap_spec=[object, object, list],
Expand Down
13 changes: 12 additions & 1 deletion rsqueakvm/primitives/system.py
@@ -1,3 +1,5 @@
from rpython.rlib import jit

from rsqueakvm import constants
from rsqueakvm.error import PrimitiveFailedError, MetaPrimFailed
from rsqueakvm.model.numeric import W_SmallInteger
Expand Down Expand Up @@ -40,7 +42,9 @@ def func(interp, s_frame, w_rcvr, primFailFlag):
raise PrimitiveFailedError

@expose_primitive(VM_PARAMETERS)
@jit.dont_look_inside
def func(interp, s_frame, argcount):
from rpython.rlib import jit_hooks
"""Behaviour depends on argument count:
0 args: return an Array of VM parameter values;
1 arg: return the indicated VM parameter;
Expand Down Expand Up @@ -123,13 +127,20 @@ def func(interp, s_frame, argcount):
vm_w_params[8] = interp.space.wrap_int(1) # must be 1 for VM Stats view to work

vm_w_params[41] = interp.space.wrap_int(1) # We are a "stack-like" VM - number of stack tables
vm_w_params[45] = interp.space.wrap_int(1) # We are a "cog-like" VM - machine code zone size
# sizeOfMachineCode = jit_hooks.stats_asmmemmgr_allocated(None)
sizeOfMachineCode = jit_hooks.stats_asmmemmgr_used(None)
vm_w_params[45] = interp.space.wrap_int(sizeOfMachineCode)

vm_w_params[39] = interp.space.wrap_int(constants.BYTES_PER_WORD)
vm_w_params[40] = interp.space.wrap_int(interp.image.version.magic)
vm_w_params[55] = interp.space.wrap_int(interp.process_switch_count)
vm_w_params[57] = interp.space.wrap_int(interp.forced_interrupt_checks_count)
vm_w_params[59] = interp.space.wrap_int(interp.stack_overflow_count)

numberOfLoops = jit_hooks.stats_get_counter_value(None, jit.Counters.TOTAL_COMPILED_LOOPS)
numberOfBridges = jit_hooks.stats_get_counter_value(None, jit.Counters.TOTAL_COMPILED_BRIDGES)
vm_w_params[63] = interp.space.wrap_int(numberOfLoops + numberOfBridges)

vm_w_params[69] = interp.space.wrap_int(constants.INTERP_PROXY_MAJOR)
vm_w_params[70] = interp.space.wrap_int(constants.INTERP_PROXY_MINOR)

Expand Down
30 changes: 30 additions & 0 deletions rsqueakvm/test/test_miniimage.py
Expand Up @@ -301,9 +301,39 @@ def test_primitive_perform():
for sel in selectors_w:
if sel.unwrap_string(None) == 'size':
w_sel = sel
break
size = _prim(space, PERFORM, [w_o, w_sel])
assert size.value == 3

def test_primitive_perform_with():
from rsqueakvm.test.test_primitives import _prim
w_o = space.wrap_list([space.wrap_int(1), 2, 3])
w_methoddict = w_o.class_shadow(space).s_superclass().s_superclass().s_superclass().s_superclass().w_methoddict()
w_methoddict.as_methoddict_get_shadow(space).sync_method_cache()
selectors_w = w_methoddict.strategy.methoddict.keys()
w_sel = None
for sel in selectors_w:
if sel.unwrap_string(None) == 'at:':
w_sel = sel
break
index = _prim(space, PERFORM, [w_o, w_sel, space.wrap_int(1)])
assert index.value == 1

def test_primitive_perform_with_with():
from rsqueakvm.test.test_primitives import _prim
w_o = space.wrap_list([1, 2, 3])
w_methoddict = w_o.class_shadow(space).s_superclass().s_superclass().s_superclass().s_superclass().w_methoddict()
w_methoddict.as_methoddict_get_shadow(space).sync_method_cache()
selectors_w = w_methoddict.strategy.methoddict.keys()
w_sel = None
for sel in selectors_w:
if sel.unwrap_string(None) == 'at:put:':
w_sel = sel
break
w_val = _prim(space, PERFORM, [w_o, w_sel, space.wrap_int(1), space.w_nil])
assert w_val is space.w_nil
assert w_o.fetch(space, 0) is space.w_nil

def test_primitive_perform_with_args():
from rsqueakvm.test.test_primitives import _prim
w_o = space.wrap_list([1, 2, 3])
Expand Down

0 comments on commit 3873f1b

Please sign in to comment.