Skip to content

Commit cc328ab

Browse files
committed
arrays in progress
1 parent c36e7e4 commit cc328ab

File tree

6 files changed

+90
-45
lines changed

6 files changed

+90
-45
lines changed

main.kar

Lines changed: 16 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,25 @@
1-
lit f1 2
2-
call alloc
3-
peek g1
4-
lit g2 10
5-
lit g3 1
61

7-
store g2 g1
2+
lit f1 4
3+
call arrays.create
84

9-
add g1 g3 r1
5+
pop g1
106

11-
add g2 g3 g2
12-
add g2 g3 g2
13-
add g2 g3 g2
14-
add g2 g3 g2
7+
lit f1 4
8+
call arrays.create
159

1610
peek f1
1711

18-
store g2 r1
1912

13+
lit f2 0
14+
lit f3 111
15+
call arrays.add
2016

21-
load g1 r2
22-
printr r2
23-
24-
25-
add g1 g3 g1
26-
27-
load g1 r2
28-
29-
printr r2
17+
lit f2 1
18+
lit f3 222
19+
call arrays.add
3020

21+
mov g1 f1
22+
printr f1
23+
lit f2 4
24+
lit f3 333
25+
call arrays.add

src/main/kotlin/kilb/Arrays.kt

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,68 @@
11
package kilb
22

33
import data.registers.RegisterType
4+
import data.registers.read
45
import internals.Vm
6+
import os
57

68
class Arrays(val vm: Vm) {
9+
val h = vm.heap!!
710
fun size() {
811
val meta = vm.registers.read(RegisterType.F1)
912
val count = vm.heap!!.get(meta + 1)
1013
vm.stackOperations.internalStack.push(count)
1114
}
15+
16+
fun create() {
17+
val size = RegisterType.F1.read(vm)
18+
val startAddr = h.alloc(size.toInt() + 1)
19+
h.set(startAddr, size)
20+
sreturn(vm, startAddr)
21+
}
22+
23+
fun get() {
24+
val stAddr = RegisterType.F1.read(vm)
25+
val size = h.get(stAddr)
26+
val minAddr = stAddr + 1
27+
println("-----------------------------------------------------------------------------")
28+
println("OS M = ${os.mainMemory.toList().subList(0, 30).joinToString()}")
29+
30+
val index = RegisterType.F2.read(vm)
31+
val value = RegisterType.F3.read(vm)
32+
33+
if (index >= size) {
34+
println("Index = $index, size - 2 = ${size - 2}")
35+
println("NOO!!!")
36+
return
37+
}
38+
h.set(minAddr + index, value)
39+
40+
println("OS M = ${os.mainMemory.toList().subList(0, 30).joinToString()}")
41+
}
42+
43+
fun add() {
44+
val stAddr = RegisterType.F1.read(vm)
45+
// F1 = addr
46+
// F2 = index
47+
// F3 = value
48+
val size = h.get(stAddr)
49+
val minAddr = stAddr + 1
50+
51+
val index = RegisterType.F2.read(vm)
52+
val value = RegisterType.F3.read(vm)
53+
54+
if (index >= size) {
55+
println("Index = $index, size - 2 = ${size - 2}")
56+
println("ERRRORRR!!! FOR ADD RAY!")
57+
return
58+
}
59+
h.set(minAddr + index, value)
60+
}
61+
62+
63+
// fun createLinked(vm: Vm) {
64+
//
65+
// }
66+
67+
1268
}

src/main/kotlin/kilb/Klib.kt

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,23 +5,36 @@ import helpers.readRegisterString
55
import internals.Vm
66

77
class Klib(val vm: Vm) {
8+
val strings = Strings(vm)
9+
val arrays = Arrays(vm)
810
fun match(fame: String): Boolean {
911
when (fame) {
1012

11-
"strings.strcmp" -> Strings(vm).strcmp()
12-
"strings.strcat" -> Strings(vm).strcat()
13-
"strings.strcpy" -> Strings(vm).strcpy()
14-
"strings.strlen" -> Strings(vm).strlen()
13+
"strings.strcmp" -> strings.strcmp()
14+
"strings.strcat" -> strings.strcat()
15+
"strings.strcpy" -> strings.strcpy()
16+
"strings.strlen" -> strings.strlen()
1517
"io.println" -> println(vm.helpers.readRegisterString(RegisterType.F1))
1618

1719

1820
"strings.cheekyfloat" -> cheekyFloat()
1921
"strings.cheekydouble" -> cheekyDouble()
20-
"arrays.size" -> Arrays(vm).size()
22+
23+
"arrays.size" -> arrays.size()
24+
"arrays.create" -> arrays.create()
25+
"arrays.set" -> arrays.add()
26+
"arrays.get" -> arrays.get()
27+
2128
"randmax" -> randMax()
2229
"strtoint" -> strtoint()
2330
else -> return false
2431
}
2532
return true
2633
}
34+
35+
36+
}
37+
38+
fun sreturn(vm: Vm, value: Long) {
39+
vm.stackOperations.internalStack.push(value)
2740
}

src/main/resources/lib/arrays/append.lib

Lines changed: 0 additions & 9 deletions
This file was deleted.

src/main/resources/lib/arrays/create.lib

Lines changed: 0 additions & 5 deletions
This file was deleted.

src/main/resources/lib/arrays/get.lib

Lines changed: 0 additions & 5 deletions
This file was deleted.

0 commit comments

Comments
 (0)