mirror of
https://github.com/zaphar/ucg.git
synced 2025-07-24 18:39:50 -04:00
feat: Handle narrowed and hole shapes for not
This commit is contained in:
parent
b1d6571194
commit
902199fd98
@ -62,10 +62,17 @@ fn derive_include_shape(
|
|||||||
|
|
||||||
fn derive_not_shape(def: &NotDef, symbol_table: &mut BTreeMap<Rc<str>, Shape>) -> Shape {
|
fn derive_not_shape(def: &NotDef, symbol_table: &mut BTreeMap<Rc<str>, Shape>) -> Shape {
|
||||||
let shape = def.expr.as_ref().derive_shape(symbol_table);
|
let shape = def.expr.as_ref().derive_shape(symbol_table);
|
||||||
if let Shape::Boolean(b) = shape {
|
if let Shape::Boolean(b) = &shape {
|
||||||
Shape::Boolean(PositionedItem::new(!b.val, def.pos.clone()))
|
return Shape::Boolean(PositionedItem::new(!b.val, def.pos.clone()));
|
||||||
} else {
|
} else if let Shape::Hole(_) = &shape {
|
||||||
// TODO(jwall): Display implementations for shapes.
|
return Shape::Boolean(PositionedItem::new(true, def.pos.clone()));
|
||||||
|
} else if let Shape::Narrowed(shape_list) = &shape {
|
||||||
|
for s in shape_list.types.iter() {
|
||||||
|
if let Shape::Boolean(b) = s {
|
||||||
|
return Shape::Boolean(PositionedItem::new(!b.val, def.pos.clone()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
Shape::TypeErr(
|
Shape::TypeErr(
|
||||||
def.pos.clone(),
|
def.pos.clone(),
|
||||||
format!(
|
format!(
|
||||||
@ -74,7 +81,6 @@ fn derive_not_shape(def: &NotDef, symbol_table: &mut BTreeMap<Rc<str>, Shape>) -
|
|||||||
),
|
),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
fn derive_copy_shape(def: &CopyDef, symbol_table: &mut BTreeMap<Rc<str>, Shape>) -> Shape {
|
fn derive_copy_shape(def: &CopyDef, symbol_table: &mut BTreeMap<Rc<str>, Shape>) -> Shape {
|
||||||
let base_shape = def.selector.derive_shape(symbol_table);
|
let base_shape = def.selector.derive_shape(symbol_table);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user