assigning to tuples should work properly now

This commit is contained in:
Mark
2023-08-15 19:18:52 +02:00
parent 0119211d92
commit ae0e163595
23 changed files with 265 additions and 75 deletions

View File

@@ -1,15 +1,25 @@
use crate::program::run::CheckError;
use super::Data;
use super::{Data, MersType, Type};
pub fn assign(from: Data, target: &Data) {
let target = target.get();
pub fn assign(from: &Data, target: &Data) {
if let Some(r) = target
.get()
.as_any()
.downcast_ref::<crate::data::reference::Reference>()
{
*r.0.lock().unwrap().get_mut() = from.get().clone();
*r.0.lock().unwrap() = from.clone();
} else if let (Some(from), Some(target)) = (
from.get()
.as_any()
.downcast_ref::<crate::data::tuple::Tuple>(),
target
.get()
.as_any()
.downcast_ref::<crate::data::tuple::Tuple>(),
) {
for (from, target) in from.0.iter().zip(target.0.iter()) {
assign(from, target);
}
} else {
todo!("assignment to non-reference")
unreachable!("invalid assignment")
}
}

View File

@@ -4,10 +4,7 @@ use std::{
sync::{Arc, Mutex},
};
use crate::program::{
self,
run::{CheckError, CheckInfo, Info},
};
use crate::program::run::{CheckError, CheckInfo, Info};
use super::{Data, MersData, MersType, Type};