simplified object enum, added xml conversion

This commit is contained in:
Graham Kelly 2023-04-12 15:32:43 -04:00
parent 4c2e52c9bb
commit 4f1e82e70a
2 changed files with 22 additions and 13 deletions

View file

@ -34,7 +34,7 @@ pub fn host_register_idt_handler(
0
}
use crate::interp::{Handle, objects::{Object, ObjectHeader, ObjectSpecial}};
use crate::interp::{objects::Object, Handle};
pub fn host_make_object(
mut caller: Caller<'_, HostState>,
@ -59,12 +59,7 @@ pub fn host_make_object(
let hand = Handle::new(olock.len());
let obj = xml::XMLElement::new(name);
olock.push(Some(Object{
header: ObjectHeader{
},
special: ObjectSpecial::Xml(obj)
}));
olock.push(Some(Object::Raw(obj)));
caller.data_mut().handles.push(hand);
// hand.into()
hand.as_u64().try_into().unwrap()

View file

@ -2,15 +2,29 @@ use alloc::{vec, vec::Vec};
use spin::{Lazy, Mutex};
pub struct Object {
pub header: ObjectHeader,
pub special: ObjectSpecial,
pub enum Object{
Raw(xml::XMLElement)
}
pub struct ObjectHeader {}
pub fn dump(o: Object) -> xml::XMLElement{
match o{
Object::Raw(x) => {
let mut e = xml::XMLElement::new("akern-internal-raw");
e.children.push(x);
return e;
}
}
}
pub enum ObjectSpecial {
Xml(xml::XMLElement),
pub fn rest(x: xml::XMLElement) -> Option<Object>{
let s: &str = &x.name;
match s{
"akern-internal-raw" => {
let f = x.children.get(0)?;
return Some(Object::Raw(f.clone()))
}
_ => None
}
}
pub type HostObjects = Vec<Option<Object>>;