Skip to content

Commit

Permalink
fix: issue kcl-lang#90 on config_expr type infer. (kcl-lang#91)
Browse files Browse the repository at this point in the history
fix: issue kcl-lang#88 on config_expr type infer.
  • Loading branch information
Peefy authored Jun 20, 2022
1 parent 7d9a4bf commit 1b71e25
Show file tree
Hide file tree
Showing 4 changed files with 16 additions and 2 deletions.
1 change: 0 additions & 1 deletion kclvm/sema/src/resolver/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,5 @@ pub fn resolve_program(program: &mut Program) -> ProgramScope {
let scope = resolver.check(kclvm_ast::MAIN_PKG);
let type_alias_mapping = resolver.ctx.type_alias_mapping.clone();
process_program_type_alias(program, type_alias_mapping);
scope.check_scope_diagnostics();
scope
}
4 changes: 3 additions & 1 deletion kclvm/sema/src/resolver/node.rs
Original file line number Diff line number Diff line change
Expand Up @@ -902,7 +902,9 @@ impl<'ctx> MutSelfTypedResultWalker<'ctx> for Resolver<'ctx> {
}
self.clear_config_expr_context(stack_depth, false);
}
self.any_ty()
let key_ty = sup(&key_types);
let val_ty = sup(&val_types);
Type::dict_ref(key_ty, val_ty)
}

fn walk_check_expr(&mut self, check_expr: &'ctx ast::CheckExpr) -> Self::Result {
Expand Down
1 change: 1 addition & 0 deletions kclvm/sema/src/resolver/test_fail_data/config_expr.k
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
data: int = {key = 1}
12 changes: 12 additions & 0 deletions kclvm/sema/src/resolver/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ use crate::resolver::resolve_program;
use crate::resolver::scope::*;
use crate::ty::Type;
use kclvm_parser::parse_program;
use kclvm_error::*;
use std::rc::Rc;

#[test]
Expand Down Expand Up @@ -34,3 +35,14 @@ fn test_resolve_program() {
assert!(main_scope.lookup("b").is_some());
assert!(main_scope.lookup("print").is_none());
}

#[test]
fn test_resolve_program_fail() {
let mut program = parse_program("./src/resolver/test_fail_data/config_expr.k").unwrap();
let scope = resolve_program(&mut program);
assert_eq!(scope.diagnostics.len(), 1);
let diag = &scope.diagnostics[0];
assert_eq!(diag.code, Some(DiagnosticId::Error(ErrorKind::TypeError)));
assert_eq!(diag.messages.len(), 1);
assert_eq!(diag.messages[0].message, "expect int, got {str:int(1)}");
}

0 comments on commit 1b71e25

Please sign in to comment.