cardinal_backend 0.1.1

Cardinal's back end.
Documentation
use crate::{ Value, ValueType };
use std::cell::RefCell;

pub fn resolve_type(value: Value, vars: &RefCell<Vec<ValueType>>) -> ValueType {
	match value {
		Value::B1(_) => ValueType::B1,
		Value::U8(_) => ValueType::U8,
		Value::U16(_) => ValueType::U16,
		Value::U32(_) => ValueType::U32,
		Value::U64(_) => ValueType::U64,
		Value::I8(_) => ValueType::I8,
		Value::I16(_) => ValueType::I16,
		Value::I32(_) => ValueType::I32,
		Value::I64(_) => ValueType::I64,
		Value::Variable(var) => {
			if let Some(v) = vars.borrow().get(var.0 as usize) {
				match v {
					&ValueType::B1 => ValueType::B1,
					&ValueType::U8 => ValueType::U8,
					&ValueType::U16 => ValueType::U16,
					&ValueType::U32 => ValueType::U32,
					&ValueType::U64 => ValueType::U64,
					&ValueType::I8 => ValueType::I8,
					&ValueType::I16 => ValueType::I16,
					&ValueType::I32 => ValueType::I32,
					&ValueType::I64 => ValueType::I64,
					&ValueType::Void => ValueType::Void
				}
			} else {
				ValueType::Void
			}
		}
	}
}