コード例 #1
0
ファイル: ops_arrays.py プロジェクト: 4toblerone/pyjvm
def arraylength(frame):
    ref = frame.stack.pop()
    if ref is None:
        frame.vm.raise_exception(frame, "java/lang/NullPointerException")
        return
    assert ref[0] == "ref"
    array = frame.vm.heap[ref[1]]
    jassert_array(array)
    length = len(array.values)
    frame.stack.append(length)
コード例 #2
0
ファイル: ops_arrays.py プロジェクト: MatevzFa/pyjvm
def arraylength(frame):
    ref = frame.stack.pop()
    if ref is None:
        frame.vm.raise_exception(frame, "java/lang/NullPointerException")
        return
    assert ref[0] == "ref"
    array = frame.vm.heap[ref[1]]
    jassert_array(array)
    length = len(array.values)
    frame.stack.append(length)
コード例 #3
0
ファイル: vmo.py プロジェクト: 4toblerone/pyjvm
def vmo1_write___BII_V(frame, args):
    '''java.io.OutputStream
    void write(byte[] b, int off, int len)
    '''
    buf = args[1]
    offset = args[2]
    length = args[3]
    arr = frame.vm.heap[buf[1]]
    jassert_array(arr)
    chars = arr.values
    for index in range(offset, offset + length):
        sys.stdout.write(chr(chars[index]))
コード例 #4
0
ファイル: vmo.py プロジェクト: MatevzFa/pyjvm
def vmo1_write___BII_V(frame, args):
    '''java.io.OutputStream
    void write(byte[] b, int off, int len)
    '''
    buf = args[1]
    offset = args[2]
    length = args[3]
    arr = frame.vm.heap[buf[1]]
    jassert_array(arr)
    chars = arr.values
    for index in range(offset, offset + length):
        sys.stdout.write(chr(chars[index]))
コード例 #5
0
ファイル: ops_arrays.py プロジェクト: MatevzFa/pyjvm
def daload(frame):
    index = frame.stack.pop()
    ref = frame.stack.pop()
    jassert_int(index)
    if ref is None:
        frame.vm.raise_exception(frame, "java/lang/NullPointerException")
        return
    jassert_ref(ref)
    array = frame.vm.heap[ref[1]]
    jassert_array(array)
    values = array.values
    if index < 0 or index >= len(values):
        frame.vm.raise_exception(frame,
                                 "java/lang/ArrayIndexOutOfBoundsException")
        return
    frame.stack.append(values[index])
コード例 #6
0
ファイル: ops_arrays.py プロジェクト: 4toblerone/pyjvm
def daload(frame):
    index = frame.stack.pop()
    ref = frame.stack.pop()
    jassert_int(index)
    if ref is None:
        frame.vm.raise_exception(frame, "java/lang/NullPointerException")
        return
    jassert_ref(ref)
    array = frame.vm.heap[ref[1]]
    jassert_array(array)
    values = array.values
    if index < 0 or index >= len(values):
        frame.vm.raise_exception(frame,
                                 "java/lang/ArrayIndexOutOfBoundsException")
        return
    frame.stack.append(values[index])
コード例 #7
0
ファイル: system.py プロジェクト: 4toblerone/pyjvm
def java_lang_System_arraycopy__Ljava_lang_Object_ILjava_lang_Object_II_V(frame, args):
    #ref1, index1, ref2, index2, length
    count = args[4]
    index2 = args[3]
    ref2 = args[2]
    index1 = args[1]
    ref1 = args[0]
    assert type(count) is int
    assert type(index1) is int
    assert type(index2) is int
    assert type(ref1) is tuple and ref1[0] == "ref"
    assert type(ref2) is tuple and ref2[0] == "ref"
    arr1 = frame.vm.heap[ref1[1]]
    arr2 = frame.vm.heap[ref2[1]]
    jassert_array(arr1)
    jassert_array(arr2)
    # TODO NPE
    arr2.values[index2:index2 + count] = arr1.values[index1:index1 + count]
コード例 #8
0
def java_lang_System_arraycopy__Ljava_lang_Object_ILjava_lang_Object_II_V(
        frame, args):
    #ref1, index1, ref2, index2, length
    count = args[4]
    index2 = args[3]
    ref2 = args[2]
    index1 = args[1]
    ref1 = args[0]
    assert type(count) is int
    assert type(index1) is int
    assert type(index2) is int
    assert type(ref1) is tuple and ref1[0] == "ref"
    assert type(ref2) is tuple and ref2[0] == "ref"
    arr1 = frame.vm.heap[ref1[1]]
    arr2 = frame.vm.heap[ref2[1]]
    jassert_array(arr1)
    jassert_array(arr2)
    # TODO NPE
    arr2.values[index2:index2 + count] = arr1.values[index1:index1 + count]