Skip to content

Commit

Permalink
arrays in progress
Browse files Browse the repository at this point in the history
  • Loading branch information
ChippyPlus committed Nov 27, 2024
1 parent c36e7e4 commit cc328ab
Show file tree
Hide file tree
Showing 6 changed files with 90 additions and 45 deletions.
37 changes: 16 additions & 21 deletions main.kar
Original file line number Diff line number Diff line change
@@ -1,30 +1,25 @@
lit f1 2
call alloc
peek g1
lit g2 10
lit g3 1

store g2 g1
lit f1 4
call arrays.create

add g1 g3 r1
pop g1

add g2 g3 g2
add g2 g3 g2
add g2 g3 g2
add g2 g3 g2
lit f1 4
call arrays.create

peek f1

store g2 r1

lit f2 0
lit f3 111
call arrays.add

load g1 r2
printr r2


add g1 g3 g1

load g1 r2

printr r2
lit f2 1
lit f3 222
call arrays.add

mov g1 f1
printr f1
lit f2 4
lit f3 333
call arrays.add
56 changes: 56 additions & 0 deletions src/main/kotlin/kilb/Arrays.kt
Original file line number Diff line number Diff line change
@@ -1,12 +1,68 @@
package kilb

import data.registers.RegisterType
import data.registers.read
import internals.Vm
import os

class Arrays(val vm: Vm) {
val h = vm.heap!!
fun size() {
val meta = vm.registers.read(RegisterType.F1)
val count = vm.heap!!.get(meta + 1)
vm.stackOperations.internalStack.push(count)
}

fun create() {
val size = RegisterType.F1.read(vm)
val startAddr = h.alloc(size.toInt() + 1)
h.set(startAddr, size)
sreturn(vm, startAddr)
}

fun get() {
val stAddr = RegisterType.F1.read(vm)
val size = h.get(stAddr)
val minAddr = stAddr + 1
println("-----------------------------------------------------------------------------")
println("OS M = ${os.mainMemory.toList().subList(0, 30).joinToString()}")

val index = RegisterType.F2.read(vm)
val value = RegisterType.F3.read(vm)

if (index >= size) {
println("Index = $index, size - 2 = ${size - 2}")
println("NOO!!!")
return
}
h.set(minAddr + index, value)

println("OS M = ${os.mainMemory.toList().subList(0, 30).joinToString()}")
}

fun add() {
val stAddr = RegisterType.F1.read(vm)
// F1 = addr
// F2 = index
// F3 = value
val size = h.get(stAddr)
val minAddr = stAddr + 1

val index = RegisterType.F2.read(vm)
val value = RegisterType.F3.read(vm)

if (index >= size) {
println("Index = $index, size - 2 = ${size - 2}")
println("ERRRORRR!!! FOR ADD RAY!")
return
}
h.set(minAddr + index, value)
}


// fun createLinked(vm: Vm) {
//
// }


}
23 changes: 18 additions & 5 deletions src/main/kotlin/kilb/Klib.kt
Original file line number Diff line number Diff line change
Expand Up @@ -5,23 +5,36 @@ import helpers.readRegisterString
import internals.Vm

class Klib(val vm: Vm) {
val strings = Strings(vm)
val arrays = Arrays(vm)
fun match(fame: String): Boolean {
when (fame) {

"strings.strcmp" -> Strings(vm).strcmp()
"strings.strcat" -> Strings(vm).strcat()
"strings.strcpy" -> Strings(vm).strcpy()
"strings.strlen" -> Strings(vm).strlen()
"strings.strcmp" -> strings.strcmp()
"strings.strcat" -> strings.strcat()
"strings.strcpy" -> strings.strcpy()
"strings.strlen" -> strings.strlen()
"io.println" -> println(vm.helpers.readRegisterString(RegisterType.F1))


"strings.cheekyfloat" -> cheekyFloat()
"strings.cheekydouble" -> cheekyDouble()
"arrays.size" -> Arrays(vm).size()

"arrays.size" -> arrays.size()
"arrays.create" -> arrays.create()
"arrays.set" -> arrays.add()
"arrays.get" -> arrays.get()

"randmax" -> randMax()
"strtoint" -> strtoint()
else -> return false
}
return true
}


}

fun sreturn(vm: Vm, value: Long) {
vm.stackOperations.internalStack.push(value)
}
9 changes: 0 additions & 9 deletions src/main/resources/lib/arrays/append.lib

This file was deleted.

5 changes: 0 additions & 5 deletions src/main/resources/lib/arrays/create.lib

This file was deleted.

5 changes: 0 additions & 5 deletions src/main/resources/lib/arrays/get.lib

This file was deleted.

0 comments on commit cc328ab

Please sign in to comment.