David Peter 1 year ago
parent
commit
0a3efea488
2 changed files with 7 additions and 5 deletions
  1. 1 1
      numbat/src/typechecker/constraints.rs
  2. 6 4
      numbat/src/typechecker/mod.rs

+ 1 - 1
numbat/src/typechecker/constraints.rs

@@ -253,7 +253,7 @@ impl Constraint {
             Constraint::Equal(Type::Dimension(dtype_x), t)
                 if dtype_x
                     .deconstruct_as_single_type_variable()
-                    .map(|tv| !dtype_x.contains(&tv, false))
+                    .map(|tv| !t.contains(&tv, false))
                     .unwrap_or(false) =>
             {
                 let x = dtype_x.deconstruct_as_single_type_variable().unwrap();

+ 6 - 4
numbat/src/typechecker/mod.rs

@@ -1347,7 +1347,7 @@ impl TypeChecker {
 
                 // Add the function to the environment, so it can be called recursively
 
-                let parameters = typed_parameters
+                let parameters: Vec<_> = typed_parameters
                     .iter()
                     .map(|(span, name, _)| (*span, name.clone()))
                     .collect();
@@ -1455,10 +1455,12 @@ impl TypeChecker {
 
                 self.constraints = typechecker_fn.constraints;
                 self.name_generator = typechecker_fn.name_generator;
-                self.env = typechecker_fn.env;
                 self.registry = typechecker_fn.registry;
-                // self.type_namespace = typechecker_fn.type_namespace;
-                // self.value_namespace = typechecker_fn.value_namespace;
+                // Copy identifier for the new function into local env:
+                let (signature, metadata) =
+                    typechecker_fn.env.get_function_info(function_name).unwrap();
+                self.env
+                    .add_function(function_name.clone(), signature.clone(), metadata.clone());
 
                 typed_ast::Statement::DefineFunction(
                     function_name.clone(),