From 19070b55c6ab245ea1d9b754536f4e965d5e35b0 Mon Sep 17 00:00:00 2001 From: he1pa <18012015693@163.com> Date: Thu, 30 May 2024 17:37:44 +0800 Subject: [PATCH] fix empty dict Signed-off-by: he1pa <18012015693@163.com> --- kclvm/sema/src/resolver/ty.rs | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/kclvm/sema/src/resolver/ty.rs b/kclvm/sema/src/resolver/ty.rs index fcdf9aba1..2971ed5a5 100644 --- a/kclvm/sema/src/resolver/ty.rs +++ b/kclvm/sema/src/resolver/ty.rs @@ -139,9 +139,8 @@ impl<'ctx> Resolver<'ctx> { range: &Range, ) -> TypeRef { match (&ty.kind, &expected_ty.kind) { - (TypeKind::Dict(DictType { key_ty, val_ty, .. }), TypeKind::Schema(schema_ty)) => { - if self.dict_assignable_to_schema(key_ty.clone(), val_ty.clone(), schema_ty, range) - { + (TypeKind::Dict(DictType { key_ty, .. }), TypeKind::Schema(schema_ty)) => { + if self.upgrade_dict_to_schema_attr_check(key_ty.clone(), schema_ty) { expected_ty } else { ty @@ -333,7 +332,15 @@ impl<'ctx> Resolver<'ctx> { return true; } match &key_ty.kind { + // empty dict {} + TypeKind::Any => true, + // single key: {key1: value1} TypeKind::StrLit(s) => schema_ty.attrs.len() == 1 && schema_ty.attrs.contains_key(s), + // multi key: { + // key1: value1 + // key2: value2 + // ... + // } TypeKind::Union(types) => { schema_ty.attrs.len() == types.len() && types.iter().all(|ty| match &ty.kind {