diff --git a/VERSION b/VERSION index 5d4294b91..2411653a5 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.5.1 \ No newline at end of file +0.5.2 \ No newline at end of file diff --git a/kclvm/runtime/src/_kclvm.bc b/kclvm/runtime/src/_kclvm.bc index bc168956a..1a7dac806 100644 Binary files a/kclvm/runtime/src/_kclvm.bc and b/kclvm/runtime/src/_kclvm.bc differ diff --git a/kclvm/runtime/src/_kclvm.h b/kclvm/runtime/src/_kclvm.h index a6da2e9e1..cc088077c 100644 --- a/kclvm/runtime/src/_kclvm.h +++ b/kclvm/runtime/src/_kclvm.h @@ -490,42 +490,6 @@ void kclvm_testing_arguments(kclvm_context_t* _ctx, kclvm_value_ref_t* _args, kc void kclvm_testing_setting_file(kclvm_context_t* _ctx, kclvm_value_ref_t* _args, kclvm_value_ref_t* _kwargs); -kclvm_bool_t kclvm_type_BoolLit_value(kclvm_type_t* p); - -double kclvm_type_FloatLit_value(kclvm_type_t* p); - -int64_t kclvm_type_IntLit_value(kclvm_type_t* p); - -kclvm_char_t* kclvm_type_StrLit_value(kclvm_type_t* p); - -kclvm_size_t kclvm_type_arg_num(kclvm_type_t* p); - -kclvm_type_t* kclvm_type_arg_type(kclvm_type_t* p, kclvm_size_t i); - -void kclvm_type_delete(kclvm_type_t* p); - -kclvm_type_t* kclvm_type_elem_type(kclvm_type_t* p); - -kclvm_type_t* kclvm_type_key_type(kclvm_type_t* p); - -kclvm_kind_t kclvm_type_kind(kclvm_type_t* p); - -kclvm_type_t* kclvm_type_return_type(kclvm_type_t* p); - -kclvm_char_t* kclvm_type_schema_field_name(kclvm_type_t* p, kclvm_size_t i); - -kclvm_size_t kclvm_type_schema_field_num(kclvm_type_t* p); - -kclvm_type_t* kclvm_type_schema_field_type(kclvm_type_t* p, kclvm_size_t i); - -kclvm_char_t* kclvm_type_schema_name(kclvm_type_t* p); - -kclvm_char_t* kclvm_type_schema_parent_name(kclvm_type_t* p); - -kclvm_bool_t kclvm_type_schema_relaxed(kclvm_type_t* p); - -kclvm_kind_t kclvm_type_str(kclvm_type_t* p); - kclvm_value_ref_t* kclvm_units_to_G(kclvm_context_t* ctx, kclvm_value_ref_t* args, kclvm_value_ref_t* kwargs); kclvm_value_ref_t* kclvm_units_to_Gi(kclvm_context_t* ctx, kclvm_value_ref_t* args, kclvm_value_ref_t* kwargs); diff --git a/kclvm/runtime/src/_kclvm.ll b/kclvm/runtime/src/_kclvm.ll index 1e7aa628c..c42036371 100644 --- a/kclvm/runtime/src/_kclvm.ll +++ b/kclvm/runtime/src/_kclvm.ll @@ -438,42 +438,6 @@ declare void @kclvm_testing_arguments(%kclvm_context_t* %_ctx, %kclvm_value_ref_ declare void @kclvm_testing_setting_file(%kclvm_context_t* %_ctx, %kclvm_value_ref_t* %_args, %kclvm_value_ref_t* %_kwargs); -declare %kclvm_bool_t @kclvm_type_BoolLit_value(%kclvm_type_t* %p); - -declare double @kclvm_type_FloatLit_value(%kclvm_type_t* %p); - -declare i64 @kclvm_type_IntLit_value(%kclvm_type_t* %p); - -declare %kclvm_char_t* @kclvm_type_StrLit_value(%kclvm_type_t* %p); - -declare %kclvm_size_t @kclvm_type_arg_num(%kclvm_type_t* %p); - -declare %kclvm_type_t* @kclvm_type_arg_type(%kclvm_type_t* %p, %kclvm_size_t %i); - -declare void @kclvm_type_delete(%kclvm_type_t* %p); - -declare %kclvm_type_t* @kclvm_type_elem_type(%kclvm_type_t* %p); - -declare %kclvm_type_t* @kclvm_type_key_type(%kclvm_type_t* %p); - -declare %kclvm_kind_t @kclvm_type_kind(%kclvm_type_t* %p); - -declare %kclvm_type_t* @kclvm_type_return_type(%kclvm_type_t* %p); - -declare %kclvm_char_t* @kclvm_type_schema_field_name(%kclvm_type_t* %p, %kclvm_size_t %i); - -declare %kclvm_size_t @kclvm_type_schema_field_num(%kclvm_type_t* %p); - -declare %kclvm_type_t* @kclvm_type_schema_field_type(%kclvm_type_t* %p, %kclvm_size_t %i); - -declare %kclvm_char_t* @kclvm_type_schema_name(%kclvm_type_t* %p); - -declare %kclvm_char_t* @kclvm_type_schema_parent_name(%kclvm_type_t* %p); - -declare %kclvm_bool_t @kclvm_type_schema_relaxed(%kclvm_type_t* %p); - -declare %kclvm_kind_t @kclvm_type_str(%kclvm_type_t* %p); - declare %kclvm_value_ref_t* @kclvm_units_to_G(%kclvm_context_t* %ctx, %kclvm_value_ref_t* %args, %kclvm_value_ref_t* %kwargs); declare %kclvm_value_ref_t* @kclvm_units_to_Gi(%kclvm_context_t* %ctx, %kclvm_value_ref_t* %args, %kclvm_value_ref_t* %kwargs); diff --git a/kclvm/runtime/src/_kclvm.rs b/kclvm/runtime/src/_kclvm.rs index 0d6e71994..fbefebda0 100644 --- a/kclvm/runtime/src/_kclvm.rs +++ b/kclvm/runtime/src/_kclvm.rs @@ -231,24 +231,6 @@ pub enum ApiFunc { kclvm_strlen, kclvm_testing_arguments, kclvm_testing_setting_file, - kclvm_type_BoolLit_value, - kclvm_type_FloatLit_value, - kclvm_type_IntLit_value, - kclvm_type_StrLit_value, - kclvm_type_arg_num, - kclvm_type_arg_type, - kclvm_type_delete, - kclvm_type_elem_type, - kclvm_type_key_type, - kclvm_type_kind, - kclvm_type_return_type, - kclvm_type_schema_field_name, - kclvm_type_schema_field_num, - kclvm_type_schema_field_type, - kclvm_type_schema_name, - kclvm_type_schema_parent_name, - kclvm_type_schema_relaxed, - kclvm_type_str, kclvm_units_to_G, kclvm_units_to_Gi, kclvm_units_to_K, diff --git a/kclvm/runtime/src/_kclvm_addr.rs b/kclvm/runtime/src/_kclvm_addr.rs index f7f285980..7a870ffa1 100644 --- a/kclvm/runtime/src/_kclvm_addr.rs +++ b/kclvm/runtime/src/_kclvm_addr.rs @@ -248,24 +248,6 @@ pub fn _kclvm_get_fn_ptr_by_name(name: &str) -> u64 { "kclvm_strlen" => crate::kclvm_strlen as *const () as u64, "kclvm_testing_arguments" => crate::kclvm_testing_arguments as *const () as u64, "kclvm_testing_setting_file" => crate::kclvm_testing_setting_file as *const () as u64, - "kclvm_type_BoolLit_value" => crate::kclvm_type_BoolLit_value as *const () as u64, - "kclvm_type_FloatLit_value" => crate::kclvm_type_FloatLit_value as *const () as u64, - "kclvm_type_IntLit_value" => crate::kclvm_type_IntLit_value as *const () as u64, - "kclvm_type_StrLit_value" => crate::kclvm_type_StrLit_value as *const () as u64, - "kclvm_type_arg_num" => crate::kclvm_type_arg_num as *const () as u64, - "kclvm_type_arg_type" => crate::kclvm_type_arg_type as *const () as u64, - "kclvm_type_delete" => crate::kclvm_type_delete as *const () as u64, - "kclvm_type_elem_type" => crate::kclvm_type_elem_type as *const () as u64, - "kclvm_type_key_type" => crate::kclvm_type_key_type as *const () as u64, - "kclvm_type_kind" => crate::kclvm_type_kind as *const () as u64, - "kclvm_type_return_type" => crate::kclvm_type_return_type as *const () as u64, - "kclvm_type_schema_field_name" => crate::kclvm_type_schema_field_name as *const () as u64, - "kclvm_type_schema_field_num" => crate::kclvm_type_schema_field_num as *const () as u64, - "kclvm_type_schema_field_type" => crate::kclvm_type_schema_field_type as *const () as u64, - "kclvm_type_schema_name" => crate::kclvm_type_schema_name as *const () as u64, - "kclvm_type_schema_parent_name" => crate::kclvm_type_schema_parent_name as *const () as u64, - "kclvm_type_schema_relaxed" => crate::kclvm_type_schema_relaxed as *const () as u64, - "kclvm_type_str" => crate::kclvm_type_str as *const () as u64, "kclvm_units_to_G" => crate::kclvm_units_to_G as *const () as u64, "kclvm_units_to_Gi" => crate::kclvm_units_to_Gi as *const () as u64, "kclvm_units_to_K" => crate::kclvm_units_to_K as *const () as u64, diff --git a/kclvm/runtime/src/_kclvm_api_spec.rs b/kclvm/runtime/src/_kclvm_api_spec.rs index deba63948..7a916b12a 100644 --- a/kclvm/runtime/src/_kclvm_api_spec.rs +++ b/kclvm/runtime/src/_kclvm_api_spec.rs @@ -130,78 +130,6 @@ // api-spec(c): kclvm_bool_t kclvm_context_pkgpath_is_imported(kclvm_char_t* pkgpath); // api-spec(llvm): declare %kclvm_bool_t @kclvm_context_pkgpath_is_imported(%kclvm_char_t* %pkgpath); -// api-spec: kclvm_type_delete -// api-spec(c): void kclvm_type_delete(kclvm_type_t* p); -// api-spec(llvm): declare void @kclvm_type_delete(%kclvm_type_t* %p); - -// api-spec: kclvm_type_kind -// api-spec(c): kclvm_kind_t kclvm_type_kind(kclvm_type_t* p); -// api-spec(llvm): declare %kclvm_kind_t @kclvm_type_kind(%kclvm_type_t* %p); - -// api-spec: kclvm_type_str -// api-spec(c): kclvm_kind_t kclvm_type_str(kclvm_type_t* p); -// api-spec(llvm): declare %kclvm_kind_t @kclvm_type_str(%kclvm_type_t* %p); - -// api-spec: kclvm_type_BoolLit_value -// api-spec(c): kclvm_bool_t kclvm_type_BoolLit_value(kclvm_type_t* p); -// api-spec(llvm): declare %kclvm_bool_t @kclvm_type_BoolLit_value(%kclvm_type_t* %p); - -// api-spec: kclvm_type_IntLit_value -// api-spec(c): int64_t kclvm_type_IntLit_value(kclvm_type_t* p); -// api-spec(llvm): declare i64 @kclvm_type_IntLit_value(%kclvm_type_t* %p); - -// api-spec: kclvm_type_FloatLit_value -// api-spec(c): double kclvm_type_FloatLit_value(kclvm_type_t* p); -// api-spec(llvm): declare double @kclvm_type_FloatLit_value(%kclvm_type_t* %p); - -// api-spec: kclvm_type_StrLit_value -// api-spec(c): kclvm_char_t* kclvm_type_StrLit_value(kclvm_type_t* p); -// api-spec(llvm): declare %kclvm_char_t* @kclvm_type_StrLit_value(%kclvm_type_t* %p); - -// api-spec: kclvm_type_key_type -// api-spec(c): kclvm_type_t* kclvm_type_key_type(kclvm_type_t* p); -// api-spec(llvm): declare %kclvm_type_t* @kclvm_type_key_type(%kclvm_type_t* %p); - -// api-spec: kclvm_type_elem_type -// api-spec(c): kclvm_type_t* kclvm_type_elem_type(kclvm_type_t* p); -// api-spec(llvm): declare %kclvm_type_t* @kclvm_type_elem_type(%kclvm_type_t* %p); - -// api-spec: kclvm_type_schema_name -// api-spec(c): kclvm_char_t* kclvm_type_schema_name(kclvm_type_t* p); -// api-spec(llvm): declare %kclvm_char_t* @kclvm_type_schema_name(%kclvm_type_t* %p); - -// api-spec: kclvm_type_schema_parent_name -// api-spec(c): kclvm_char_t* kclvm_type_schema_parent_name(kclvm_type_t* p); -// api-spec(llvm): declare %kclvm_char_t* @kclvm_type_schema_parent_name(%kclvm_type_t* %p); - -// api-spec: kclvm_type_schema_relaxed -// api-spec(c): kclvm_bool_t kclvm_type_schema_relaxed(kclvm_type_t* p); -// api-spec(llvm): declare %kclvm_bool_t @kclvm_type_schema_relaxed(%kclvm_type_t* %p); - -// api-spec: kclvm_type_schema_field_num -// api-spec(c): kclvm_size_t kclvm_type_schema_field_num(kclvm_type_t* p); -// api-spec(llvm): declare %kclvm_size_t @kclvm_type_schema_field_num(%kclvm_type_t* %p); - -// api-spec: kclvm_type_schema_field_name -// api-spec(c): kclvm_char_t* kclvm_type_schema_field_name(kclvm_type_t* p, kclvm_size_t i); -// api-spec(llvm): declare %kclvm_char_t* @kclvm_type_schema_field_name(%kclvm_type_t* %p, %kclvm_size_t %i); - -// api-spec: kclvm_type_schema_field_type -// api-spec(c): kclvm_type_t* kclvm_type_schema_field_type(kclvm_type_t* p, kclvm_size_t i); -// api-spec(llvm): declare %kclvm_type_t* @kclvm_type_schema_field_type(%kclvm_type_t* %p, %kclvm_size_t %i); - -// api-spec: kclvm_type_arg_num -// api-spec(c): kclvm_size_t kclvm_type_arg_num(kclvm_type_t* p); -// api-spec(llvm): declare %kclvm_size_t @kclvm_type_arg_num(%kclvm_type_t* %p); - -// api-spec: kclvm_type_arg_type -// api-spec(c): kclvm_type_t* kclvm_type_arg_type(kclvm_type_t* p, kclvm_size_t i); -// api-spec(llvm): declare %kclvm_type_t* @kclvm_type_arg_type(%kclvm_type_t* %p, %kclvm_size_t %i); - -// api-spec: kclvm_type_return_type -// api-spec(c): kclvm_type_t* kclvm_type_return_type(kclvm_type_t* p); -// api-spec(llvm): declare %kclvm_type_t* @kclvm_type_return_type(%kclvm_type_t* %p); - // api-spec: kclvm_context_set_import_names // api-spec(c): void kclvm_context_set_import_names(kclvm_context_t* p, kclvm_value_ref_t* import_names); // api-spec(llvm): declare void @kclvm_context_set_import_names(%kclvm_context_t* %p, %kclvm_value_ref_t* %import_names); diff --git a/kclvm/runtime/src/types/api.rs b/kclvm/runtime/src/types/api.rs deleted file mode 100644 index c8e27f7cc..000000000 --- a/kclvm/runtime/src/types/api.rs +++ /dev/null @@ -1,252 +0,0 @@ -// Copyright 2021 The KCL Authors. All rights reserved. -#![allow(clippy::missing_safety_doc)] - -use crate::*; - -#[allow(dead_code, non_camel_case_types)] -type kclvm_context_t = Context; - -#[allow(dead_code, non_camel_case_types)] -type kclvm_kind_t = Kind; - -#[allow(dead_code, non_camel_case_types)] -type kclvm_type_t = Type; - -#[allow(dead_code, non_camel_case_types)] -type kclvm_value_t = Value; - -#[allow(dead_code, non_camel_case_types)] -type kclvm_char_t = i8; - -#[allow(dead_code, non_camel_case_types)] -type kclvm_size_t = i32; - -#[allow(dead_code, non_camel_case_types)] -type kclvm_bool_t = i8; - -#[allow(dead_code, non_camel_case_types)] -type kclvm_int_t = i64; - -#[allow(dead_code, non_camel_case_types)] -type kclvm_float_t = f64; - -// ---------------------------------------------------------------------------- -// delete -// ---------------------------------------------------------------------------- - -#[no_mangle] -#[runtime_fn] -pub unsafe extern "C" fn kclvm_type_delete(p: *mut kclvm_type_t) { - free_mut_ptr(p); -} - -// ---------------------------------------------------------------------------- -// kind -// ---------------------------------------------------------------------------- - -#[no_mangle] -#[runtime_fn] -pub unsafe extern "C" fn kclvm_type_kind(p: *const kclvm_type_t) -> kclvm_kind_t { - let p = ptr_as_ref(p); - - p.kind() -} - -// ---------------------------------------------------------------------------- -// type_str -// ---------------------------------------------------------------------------- - -#[no_mangle] -#[runtime_fn] -pub unsafe extern "C" fn kclvm_type_str(p: *const kclvm_type_t) -> kclvm_kind_t { - let p = ptr_as_ref(p); - - p.kind() -} - -// ---------------------------------------------------------------------------- -// lit value -// ---------------------------------------------------------------------------- - -#[no_mangle] -#[runtime_fn] -pub unsafe extern "C" fn kclvm_type_BoolLit_value(p: *const kclvm_type_t) -> kclvm_bool_t { - match ptr_as_ref(p) { - Type::bool_lit_type(ref v) => *v as kclvm_bool_t, - _ => 0, - } -} - -#[no_mangle] -#[runtime_fn] -pub unsafe extern "C" fn kclvm_type_IntLit_value(p: *const kclvm_type_t) -> i64 { - let p = ptr_as_ref(p); - match p { - Type::int_lit_type(ref v) => *v, - _ => 0, - } -} - -#[no_mangle] -#[runtime_fn] -pub unsafe extern "C" fn kclvm_type_FloatLit_value(p: *const kclvm_type_t) -> f64 { - let p = ptr_as_ref(p); - match p { - Type::float_lit_type(ref v) => *v, - _ => 0.0, - } -} - -#[no_mangle] -#[runtime_fn] -pub unsafe extern "C" fn kclvm_type_StrLit_value(p: *const kclvm_type_t) -> *const kclvm_char_t { - let p = ptr_as_ref(p); - match p { - Type::str_lit_type(ref v) => v.as_ptr() as *const kclvm_char_t, - _ => std::ptr::null(), - } -} - -// ---------------------------------------------------------------------------- -// list/dict type -// ---------------------------------------------------------------------------- - -#[no_mangle] -#[runtime_fn] -pub unsafe extern "C" fn kclvm_type_key_type(p: *const kclvm_type_t) -> *const kclvm_type_t { - let p = ptr_as_ref(p); - match p { - Type::dict_type(ref v) => { - return v.key_type.as_ref() as *const Type; - } - _ => std::ptr::null(), - } -} - -#[no_mangle] -#[runtime_fn] -pub unsafe extern "C" fn kclvm_type_elem_type(p: *const kclvm_type_t) -> *const kclvm_type_t { - let p = ptr_as_ref(p); - match p { - Type::list_type(ref v) => { - return v.elem_type.as_ref() as *const Type; - } - Type::dict_type(ref v) => { - return v.elem_type.as_ref() as *const Type; - } - _ => std::ptr::null(), - } -} - -// ---------------------------------------------------------------------------- -// schema -// ---------------------------------------------------------------------------- - -#[no_mangle] -#[runtime_fn] -pub unsafe extern "C" fn kclvm_type_schema_name(p: *const kclvm_type_t) -> *const kclvm_char_t { - let p = ptr_as_ref(p); - match p { - Type::schema_type(ref v) => v.name.as_ptr() as *const kclvm_char_t, - _ => std::ptr::null(), - } -} - -#[no_mangle] -#[runtime_fn] -pub unsafe extern "C" fn kclvm_type_schema_parent_name( - p: *const kclvm_type_t, -) -> *const kclvm_char_t { - let p = ptr_as_ref(p); - match p { - Type::schema_type(ref v) => v.parent_name.as_ptr() as *const kclvm_char_t, - _ => std::ptr::null(), - } -} - -#[no_mangle] -#[runtime_fn] -pub unsafe extern "C" fn kclvm_type_schema_relaxed(p: *const kclvm_type_t) -> kclvm_bool_t { - let p = ptr_as_ref(p); - match p { - Type::schema_type(..) => false as kclvm_bool_t, - _ => 0, - } -} - -#[no_mangle] -#[runtime_fn] -pub unsafe extern "C" fn kclvm_type_schema_field_num(p: *const kclvm_type_t) -> kclvm_size_t { - let p = ptr_as_ref(p); - match p { - Type::schema_type(ref v) => v.field_names.len() as kclvm_size_t, - _ => 0, - } -} - -#[no_mangle] -#[runtime_fn] -pub unsafe extern "C" fn kclvm_type_schema_field_name( - p: *const kclvm_type_t, - i: kclvm_size_t, -) -> *const kclvm_char_t { - let p = ptr_as_ref(p); - match p { - Type::schema_type(ref v) => v.field_names[i as usize].as_ptr() as *const kclvm_char_t, - _ => std::ptr::null(), - } -} - -#[no_mangle] -#[runtime_fn] -pub unsafe extern "C" fn kclvm_type_schema_field_type( - p: *const kclvm_type_t, - i: kclvm_size_t, -) -> *const kclvm_type_t { - let p = ptr_as_ref(p); - match p { - Type::schema_type(ref v) => &v.field_types[i as usize] as *const kclvm_type_t, - _ => std::ptr::null(), - } -} - -// ---------------------------------------------------------------------------- -// func (for plugin) -// ---------------------------------------------------------------------------- - -#[no_mangle] -#[runtime_fn] -pub unsafe extern "C" fn kclvm_type_arg_num(p: *const kclvm_type_t) -> kclvm_size_t { - let p = ptr_as_ref(p); - match p { - Type::func_type(ref v) => v.args_types.len() as kclvm_size_t, - _ => 0, - } -} - -#[no_mangle] -#[runtime_fn] -pub unsafe extern "C" fn kclvm_type_arg_type( - p: *const kclvm_type_t, - i: kclvm_size_t, -) -> *const kclvm_type_t { - let p = ptr_as_ref(p); - match p { - Type::func_type(ref v) => &v.args_types[i as usize] as *const kclvm_type_t, - _ => std::ptr::null(), - } -} - -#[no_mangle] -#[runtime_fn] -pub unsafe extern "C" fn kclvm_type_return_type(p: *const kclvm_type_t) -> *const kclvm_type_t { - let p = ptr_as_ref(p); - match p { - Type::func_type(ref v) => v.return_type.as_ref() as *const kclvm_type_t, - _ => std::ptr::null(), - } -} - -// ---------------------------------------------------------------------------- -// END -// ---------------------------------------------------------------------------- diff --git a/kclvm/runtime/src/types/mod.rs b/kclvm/runtime/src/types/mod.rs index 7f1db4c8b..1233f2678 100644 --- a/kclvm/runtime/src/types/mod.rs +++ b/kclvm/runtime/src/types/mod.rs @@ -1,7 +1,4 @@ -// Copyright 2021 The KCL Authors. All rights reserved. - -pub mod api; -pub use api::*; +// Copyright The KCL Authors. All rights reserved. pub mod typ_kind; pub use typ_kind::*;