Fix type error
This commit is contained in:
parent
d5df74363a
commit
c0791ebb83
@ -48,37 +48,35 @@ impl TypeConstructor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn construct(self, context: &Context) -> Result<Type, ValidationError> {
|
pub fn construct(self, context: &Context) -> Result<Type, ValidationError> {
|
||||||
match self {
|
let r#type = match self {
|
||||||
TypeConstructor::Function(_) => todo!(),
|
TypeConstructor::Function(_) => todo!(),
|
||||||
TypeConstructor::Identifier(WithPosition {
|
TypeConstructor::Identifier(WithPosition {
|
||||||
node: identifier,
|
node: identifier, ..
|
||||||
position,
|
|
||||||
}) => {
|
}) => {
|
||||||
if let Some(r#type) = context.get_type(&identifier)? {
|
if let Some(r#type) = context.get_type(&identifier)? {
|
||||||
Ok(r#type)
|
Type::Generic(Some(Box::new(r#type)))
|
||||||
} else {
|
} else {
|
||||||
Err(ValidationError::VariableNotFound {
|
Type::Generic(None)
|
||||||
identifier,
|
|
||||||
position,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
TypeConstructor::List(positioned_constructor) => {
|
TypeConstructor::List(positioned_constructor) => {
|
||||||
let ListTypeConstructor { length, item_type } = positioned_constructor.node;
|
let ListTypeConstructor { length, item_type } = positioned_constructor.node;
|
||||||
let constructed_type = item_type.construct(context)?;
|
let constructed_type = item_type.construct(context)?;
|
||||||
|
|
||||||
Ok(Type::List {
|
Type::List {
|
||||||
length,
|
length,
|
||||||
item_type: Box::new(constructed_type),
|
item_type: Box::new(constructed_type),
|
||||||
})
|
}
|
||||||
}
|
}
|
||||||
TypeConstructor::ListOf(item_type) => {
|
TypeConstructor::ListOf(item_type) => {
|
||||||
let item_type = item_type.node.construct(&context)?;
|
let item_type = item_type.node.construct(&context)?;
|
||||||
|
|
||||||
Ok(Type::ListOf(Box::new(item_type)))
|
Type::ListOf(Box::new(item_type))
|
||||||
}
|
|
||||||
TypeConstructor::Type(r#type) => Ok(r#type.node),
|
|
||||||
}
|
}
|
||||||
|
TypeConstructor::Type(r#type) => r#type.node,
|
||||||
|
};
|
||||||
|
|
||||||
|
Ok(r#type)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user