forked from AbleOS/ableos
simplified object enum, added xml conversion
This commit is contained in:
parent
4c2e52c9bb
commit
4f1e82e70a
|
@ -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()
|
||||
|
|
|
@ -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>>;
|
||||
|
|
Loading…
Reference in a new issue