mirror of
https://github.com/Dummi26/mers.git
synced 2026-03-04 08:36:33 +01:00
assigning to tuples should work properly now
This commit is contained in:
@@ -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")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user