From bd5ce01234ba184ee9b99edadebd913b919b7c6b Mon Sep 17 00:00:00 2001 From: afonya Date: Mon, 16 Jun 2025 17:05:09 +0200 Subject: [PATCH] added a way to loop through every table --- src/enviroment.rs | 24 +++++++++++++++++++++++- test.asl | 5 +++-- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/src/enviroment.rs b/src/enviroment.rs index 5c71d6a..bfe514c 100644 --- a/src/enviroment.rs +++ b/src/enviroment.rs @@ -1,4 +1,4 @@ -use std::{collections::HashMap, io::{BufReader, Read, Write}, net::{self, TcpListener, TcpStream}, process, thread::sleep, time::Duration}; +use std::{collections::HashMap, io::{BufReader, Read, Write}, net::{self, TcpListener, TcpStream}, process, thread::sleep, time::Duration, vec}; use crate::{errors::{create_error, print_error, ErrorSubType, ErrorType}, virtualmachine::{DecompiledOperation, Machine, TableValue, VMMemory, VMMemoryBoolean, VMMemoryNativeFunction, VMMemoryNull, VMMemoryNumber, VMMemoryString, VMMemoryTable}}; @@ -530,6 +530,24 @@ fn tabla_torol(machine: &mut Machine, op: &DecompiledOperation, args: Vec) -> VMMemory { + arg_expect(&args, 0, "table", machine, op); + let tbl = match &args[0] { + VMMemory::Table(tbl) => tbl.clone(), + _ => { + error(String::from("Expected a table"), machine, op); + return VMMemory::Null(VMMemoryNull { variable_id: 0 }); + } + }; + let mut keys = VMMemoryTable { + values: vec![], + variable_id: 0, + }; + for kv in &tbl.values { + keys.values.push(TableValue { key: VMMemory::Number(VMMemoryNumber { value: keys.values.len() as i64, variable_id: 0 }), value: kv.key.clone() }); + } + return VMMemory::Table(keys); +} pub fn generate() -> HashMap { let mut mem: HashMap = HashMap::new(); @@ -607,6 +625,10 @@ pub fn generate() -> HashMap { TableValue { key: VMMemory::String(VMMemoryString { value: String::from("töröl"), variable_id: 0 }), value: VMMemory::NativeFunction(VMMemoryNativeFunction { func: tabla_torol, variable_id: 0 }), + }, + TableValue { + key: VMMemory::String(VMMemoryString { value: String::from("kulcsok"), variable_id: 0 }), + value: VMMemory::NativeFunction(VMMemoryNativeFunction { func: tabla_kulcsok, variable_id: 0 }), } ]; mem.insert(String::from("tábla"), VMMemory::Table(VMMemoryTable { values: table, variable_id: 0 })); diff --git a/test.asl b/test.asl index cbe0f58..3aa93d5 100644 --- a/test.asl +++ b/test.asl @@ -1,5 +1,6 @@ -gethelj a = {1,2} +gethelj a = {1,2,[szaft"test"szaft]=128} a = tábla.hozzáad(a, 1) ugass(a) a = tábla.töröl(a, 0) -ugass(a) \ No newline at end of file +ugass(a) +ugass(tábla.kulcsok(a)) \ No newline at end of file