diff --git a/src/protocol/ast.rs b/src/protocol/ast.rs index b1711f01c47b37b5fce11546146c2e432357abfb..41a89918e25e80a760da57a086d19596513c87e2 100644 --- a/src/protocol/ast.rs +++ b/src/protocol/ast.rs @@ -5,6 +5,7 @@ use std::ops::{Index, IndexMut}; use super::arena::{Arena, Id}; use crate::collections::StringRef; use crate::protocol::input_source::InputSpan; +use crate::protocol::TypeId; /// Helper macro that defines a type alias for a AST element ID. In this case /// only used to alias the `Id` types. @@ -1015,6 +1016,18 @@ pub enum ProcedureKind { Composite, } +/// Monomorphed instantiation of a procedure (or the sole instantiation of a +/// non-polymorphic procedure). +pub struct ProcedureDefinitionMonomorph { + pub argument_types: Vec, + pub expr_info: Vec +} + +pub struct MonomorphExpressionInfo { + pub type_id: TypeId, + pub index: i32, // for called procedure's monomorphs, or selected field indices +} + /// Generic storage for functions, primitive components and composite /// components. // Note that we will have function definitions for builtin functions as well. In @@ -1035,7 +1048,7 @@ pub struct ProcedureDefinition { pub scope: ScopeId, pub body: BlockStatementId, // Monomorphization of typed procedures - + pub monomorphs: Vec, // Validation/linking pub num_expressions_in_body: i32, } @@ -1054,6 +1067,7 @@ impl ProcedureDefinition { parameters: Vec::new(), scope: ScopeId::new_invalid(), body: BlockStatementId::new_invalid(), + monomorphs: Vec::new(), num_expressions_in_body: -1, } } @@ -1568,7 +1582,8 @@ pub struct AssignmentExpression { pub right: ExpressionId, // Validator/Linker pub parent: ExpressionParent, - pub unique_id_in_definition: i32, + // Typing + pub expr_index: i32, } #[derive(Debug, Clone)] @@ -1581,7 +1596,8 @@ pub struct BindingExpression { pub bound_from: ExpressionId, // Validator/Linker pub parent: ExpressionParent, - pub unique_id_in_definition: i32, + // Typing + pub expr_index: i32, } #[derive(Debug, Clone)] @@ -1595,7 +1611,8 @@ pub struct ConditionalExpression { pub false_expression: ExpressionId, // Validator/Linking pub parent: ExpressionParent, - pub unique_id_in_definition: i32, + // Typing + pub expr_index: i32, } #[derive(Debug, Clone, Copy, PartialEq, Eq)] @@ -1632,7 +1649,8 @@ pub struct BinaryExpression { pub right: ExpressionId, // Validator/Linker pub parent: ExpressionParent, - pub unique_id_in_definition: i32, + // Typing + pub expr_index: i32, } #[derive(Debug, Clone, Copy, PartialEq, Eq)] @@ -1653,7 +1671,8 @@ pub struct UnaryExpression { pub expression: ExpressionId, // Validator/Linker pub parent: ExpressionParent, - pub unique_id_in_definition: i32, + // Typing + pub expr_index: i32, } #[derive(Debug, Clone)] @@ -1666,7 +1685,8 @@ pub struct IndexingExpression { pub index: ExpressionId, // Validator/Linker pub parent: ExpressionParent, - pub unique_id_in_definition: i32, + // Typing + pub expr_index: i32, } #[derive(Debug, Clone)] @@ -1680,7 +1700,8 @@ pub struct SlicingExpression { pub to_index: ExpressionId, // Validator/Linker pub parent: ExpressionParent, - pub unique_id_in_definition: i32, + // Typing + pub expr_index: i32, } #[derive(Debug, Clone)] @@ -1699,7 +1720,8 @@ pub struct SelectExpression { pub kind: SelectKind, // Validator/Linker pub parent: ExpressionParent, - pub unique_id_in_definition: i32, + // Typing + pub expr_index: i32, } #[derive(Debug, Clone)] @@ -1712,7 +1734,8 @@ pub struct CastExpression { pub subject: ExpressionId, // Validator/linker pub parent: ExpressionParent, - pub unique_id_in_definition: i32, + // Typing + pub expr_index: i32, } #[derive(Debug, Clone)] @@ -1727,7 +1750,8 @@ pub struct CallExpression { pub procedure: ProcedureDefinitionId, // Validator/Linker pub parent: ExpressionParent, - pub unique_id_in_definition: i32, + // Typing + pub expr_index: i32, } #[derive(Debug, Clone, PartialEq, Eq)] @@ -1763,7 +1787,8 @@ pub struct LiteralExpression { pub value: Literal, // Validator/Linker pub parent: ExpressionParent, - pub unique_id_in_definition: i32, + // Typing + pub expr_index: i32, } #[derive(Debug, Clone)] @@ -1860,5 +1885,6 @@ pub struct VariableExpression { pub declaration: Option, pub used_as_binding_target: bool, pub parent: ExpressionParent, - pub unique_id_in_definition: i32, // used to index into type table after all types are determined + // Typing + pub expr_index: i32, } \ No newline at end of file