mirror of
https://github.com/zaphar/ucg.git
synced 2025-07-25 18:49:50 -04:00
maint: Various cleanups and TODO stuff
This commit is contained in:
parent
c88b5eaf84
commit
b1d6571194
@ -274,7 +274,8 @@ impl NarrowedShape {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[doc = "Shapes represent the types that UCG values or expressions can have."]
|
// TODO(jwall): Display implementations for shapes.
|
||||||
|
/// Shapes represent the types that UCG values or expressions can have.
|
||||||
#[derive(PartialEq, Debug, Clone)]
|
#[derive(PartialEq, Debug, Clone)]
|
||||||
pub enum Shape {
|
pub enum Shape {
|
||||||
Empty(Position),
|
Empty(Position),
|
||||||
@ -309,12 +310,10 @@ impl Shape {
|
|||||||
self.narrow_tuple_shapes(left_slist, right_slist, right)
|
self.narrow_tuple_shapes(left_slist, right_slist, right)
|
||||||
}
|
}
|
||||||
(Shape::Func(left_opshape), Shape::Func(right_opshape)) => {
|
(Shape::Func(left_opshape), Shape::Func(right_opshape)) => {
|
||||||
// TODO
|
todo!();
|
||||||
unimplemented!("Can't merge these yet.");
|
|
||||||
}
|
}
|
||||||
(Shape::Module(left_opshape), Shape::Module(right_opshape)) => {
|
(Shape::Module(left_opshape), Shape::Module(right_opshape)) => {
|
||||||
// TODO
|
todo!();
|
||||||
unimplemented!("Can't merge these yet.");
|
|
||||||
}
|
}
|
||||||
_ => Shape::TypeErr(
|
_ => Shape::TypeErr(
|
||||||
right.pos().clone(),
|
right.pos().clone(),
|
||||||
|
@ -20,7 +20,9 @@ use crate::ast::walk::Visitor;
|
|||||||
use crate::ast::{Expression, FailDef, ImportDef, IncludeDef, Shape, Statement, Value};
|
use crate::ast::{Expression, FailDef, ImportDef, IncludeDef, Shape, Statement, Value};
|
||||||
use crate::error::{BuildError, ErrorType};
|
use crate::error::{BuildError, ErrorType};
|
||||||
|
|
||||||
use super::{PositionedItem, NarrowedShape, ImportShape, CastType, NotDef, CopyDef, ModuleShape, FuncDef};
|
use super::{
|
||||||
|
CastType, CopyDef, FuncDef, ImportShape, ModuleShape, NarrowedShape, NotDef, PositionedItem,
|
||||||
|
};
|
||||||
|
|
||||||
/// Trait for shape derivation.
|
/// Trait for shape derivation.
|
||||||
pub trait DeriveShape {
|
pub trait DeriveShape {
|
||||||
@ -171,9 +173,7 @@ impl DeriveShape for Expression {
|
|||||||
fn derive_shape(&self, symbol_table: &mut BTreeMap<Rc<str>, Shape>) -> Shape {
|
fn derive_shape(&self, symbol_table: &mut BTreeMap<Rc<str>, Shape>) -> Shape {
|
||||||
match self {
|
match self {
|
||||||
Expression::Simple(v) => v.derive_shape(symbol_table),
|
Expression::Simple(v) => v.derive_shape(symbol_table),
|
||||||
Expression::Format(def) => {
|
Expression::Format(def) => Shape::Str(PositionedItem::new("".into(), def.pos.clone())),
|
||||||
Shape::Str(PositionedItem::new("".into(), def.pos.clone()))
|
|
||||||
}
|
|
||||||
Expression::Not(def) => derive_not_shape(def, symbol_table),
|
Expression::Not(def) => derive_not_shape(def, symbol_table),
|
||||||
Expression::Grouped(v, _pos) => v.as_ref().derive_shape(symbol_table),
|
Expression::Grouped(v, _pos) => v.as_ref().derive_shape(symbol_table),
|
||||||
Expression::Range(def) => Shape::List(NarrowedShape::new_with_pos(
|
Expression::Range(def) => Shape::List(NarrowedShape::new_with_pos(
|
||||||
@ -247,6 +247,14 @@ pub struct Checker {
|
|||||||
shape_stack: Vec<Shape>,
|
shape_stack: Vec<Shape>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO(jwall): I am beginning to suspect that derive_shape should be a Trait.
|
||||||
|
// It would allow me to specify the contract a little more specifically now that
|
||||||
|
// I'm basically implementing the method all over the place.
|
||||||
|
|
||||||
|
// TODO(jwall): The symbol table contract also needs to be fleshed out a little better.
|
||||||
|
// I need to acccount for scopes syntactic scopes a bit. packages, functions and modules all are a
|
||||||
|
// factor.
|
||||||
|
|
||||||
impl Checker {
|
impl Checker {
|
||||||
pub fn new() -> Self {
|
pub fn new() -> Self {
|
||||||
return Self {
|
return Self {
|
||||||
@ -295,7 +303,6 @@ impl Visitor for Checker {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn visit_value(&mut self, val: &mut Value) {
|
fn visit_value(&mut self, val: &mut Value) {
|
||||||
// TODO(jwall): Some values can contain expressions. Handle those here.
|
|
||||||
match val {
|
match val {
|
||||||
Value::Empty(p) => self.shape_stack.push(Shape::Empty(p.clone())),
|
Value::Empty(p) => self.shape_stack.push(Shape::Empty(p.clone())),
|
||||||
Value::Boolean(p) => self.shape_stack.push(Shape::Boolean(p.clone())),
|
Value::Boolean(p) => self.shape_stack.push(Shape::Boolean(p.clone())),
|
||||||
|
@ -14,7 +14,6 @@
|
|||||||
|
|
||||||
//! The tokenization stage of the ucg compiler.
|
//! The tokenization stage of the ucg compiler.
|
||||||
use std;
|
use std;
|
||||||
use std::rc::Rc;
|
|
||||||
|
|
||||||
use abortable_parser::combinators::*;
|
use abortable_parser::combinators::*;
|
||||||
use abortable_parser::iter::SliceIter;
|
use abortable_parser::iter::SliceIter;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user