Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: refactor schema optional mapping and support internal schema partial eval #404

Merged
merged 4 commits into from
Feb 8, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions kclvm/capi/src/service/service.rs
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,8 @@ impl KclvmService {
/// use kclvm_capi::model::gpyrpc::*;
/// let serv = &KclvmService { plugin_agent: 0 };
/// let args = &ExecProgram_Args {
/// work_dir: "./src/testdata".to_string(),
/// k_filename_list: vec!["./src/testdata".to_string()],
/// work_dir: ".".to_string(),
/// k_filename_list: vec!["./src/testdata/test.k".to_string()],
/// ..Default::default()
/// };
/// let exec_result = serv.exec_program(args).unwrap();
Expand Down
10 changes: 6 additions & 4 deletions kclvm/compiler/src/codegen/llvm/context.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1819,10 +1819,12 @@ impl<'ctx> LLVMCodeGenContext<'ctx> {
}
}
if is_in_schema {
let schema_value = self
.get_variable(value::SCHEMA_SELF_NAME)
.expect(kcl_error::INTERNAL_ERROR_MSG);
self.dict_insert_override_item(dict_value, value::SCHEMA_SELF_NAME, schema_value);
for shcmea_closure_name in value::SCHEMA_VARIABLE_LIST {
let value = self
.get_variable(shcmea_closure_name)
.expect(kcl_error::INTERNAL_ERROR_MSG);
self.dict_insert_override_item(dict_value, shcmea_closure_name, value);
}
}
dict_value
}
Expand Down
53 changes: 30 additions & 23 deletions kclvm/compiler/src/codegen/llvm/node.rs
Original file line number Diff line number Diff line change
Expand Up @@ -666,15 +666,6 @@ impl<'ctx> TypedResultWalker<'ctx> for LLVMCodeGenContext<'ctx> {
],
);
}
self.build_void_call(
&ApiFunc::kclvm_schema_optional_check.name(),
&[
schema_value,
attr_optional_mapping,
schema_name_native_str,
schema_config_meta,
],
);
{
let index_sign_key_name = if let Some(index_signature) = &schema_stmt.index_signature {
if let Some(key_name) = &index_signature.node.key_name {
Expand Down Expand Up @@ -735,11 +726,13 @@ impl<'ctx> TypedResultWalker<'ctx> for LLVMCodeGenContext<'ctx> {
&[
schema_value,
schema_config,
schema_config_meta,
schema_name_native_str,
schema_pkgpath_native_str,
is_sub_schema,
record_instance,
instance_pkgpath,
attr_optional_mapping,
],
);
// Schema constructor function returns a schema
Expand Down Expand Up @@ -1676,9 +1669,17 @@ impl<'ctx> TypedResultWalker<'ctx> for LLVMCodeGenContext<'ctx> {
self.dict_insert(dict_value, name.as_str(), value, 0, -1);
}
let pkgpath = self.native_global_string_value(&self.current_pkgpath());
let is_in_schema = self.schema_stack.borrow().len() > 0;
Ok(self.build_call(
&ApiFunc::kclvm_value_function_invoke.name(),
&[func, self.global_ctx_ptr(), list_value, dict_value, pkgpath],
&[
func,
self.global_ctx_ptr(),
list_value,
dict_value,
pkgpath,
self.bool_value(is_in_schema),
],
))
}

Expand Down Expand Up @@ -1933,6 +1934,12 @@ impl<'ctx> TypedResultWalker<'ctx> for LLVMCodeGenContext<'ctx> {
pkgpath,
],
);
// Check the required attributes only when the values of all attributes
// in the final schema are solved.
let is_in_schema = self.schema_stack.borrow().len() > 0;
if !is_in_schema {
self.build_void_call(&ApiFunc::kclvm_schema_optional_check.name(), &[schema]);
}
utils::update_ctx_filename(self, &schema_expr.config);
Ok(schema)
}
Expand Down Expand Up @@ -2008,19 +2015,19 @@ impl<'ctx> TypedResultWalker<'ctx> for LLVMCodeGenContext<'ctx> {
self.builder.build_store(var, closure_map);
self.add_variable(value::LAMBDA_CLOSURE, var);
if is_in_schema {
let string_ptr_value = self
.native_global_string(value::SCHEMA_SELF_NAME, "")
.into();
let schema_value = self.build_call(
&ApiFunc::kclvm_dict_get_value.name(),
&[closure_map, string_ptr_value],
);
let value_ptr_type = self.value_ptr_type();
let var = self
.builder
.build_alloca(value_ptr_type, value::SCHEMA_SELF_NAME);
self.builder.build_store(var, schema_value);
self.add_variable(value::SCHEMA_SELF_NAME, var);
for shcmea_closure_name in value::SCHEMA_VARIABLE_LIST {
let string_ptr_value = self.native_global_string(shcmea_closure_name, "").into();
let schema_value = self.build_call(
&ApiFunc::kclvm_dict_get_value.name(),
&[closure_map, string_ptr_value],
);
let value_ptr_type = self.value_ptr_type();
let var = self
.builder
.build_alloca(value_ptr_type, shcmea_closure_name);
self.builder.build_store(var, schema_value);
self.add_variable(shcmea_closure_name, var);
}
}
self.walk_arguments(&lambda_expr.args, args, kwargs);
let val = self
Expand Down
10 changes: 0 additions & 10 deletions kclvm/compiler/src/codegen/llvm/utils.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
// Copyright 2021 The KCL Authors. All rights reserved.

use inkwell::values::BasicValueEnum;
use kclvm_ast::ast;
use kclvm_runtime::ApiFunc;
use std::str;
Expand Down Expand Up @@ -60,12 +59,3 @@ pub fn update_ctx_current_line(gen: &LLVMCodeGenContext) {
],
);
}

/// Runtime debug print value
#[allow(dead_code)]
pub fn runtime_print_value<'ctx>(gen: &'ctx LLVMCodeGenContext, value: BasicValueEnum<'ctx>) {
gen.build_void_call(
ApiFunc::kclvm_debug_print_value_json_string.name().as_str(),
&[value],
);
}
11 changes: 11 additions & 0 deletions kclvm/compiler/src/value/schema.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,17 @@ pub const SCHEMA_CAL_MAP: &str = "$schema_cal_map";
pub const SCHEMA_ARGS: &str = "$schema_args";
pub const SCHEMA_KWARGS: &str = "$schema_kwargs";
pub const SCHEMA_RUNTIME_TYPE: &str = "$schema_runtime_type";
pub const SCHEMA_VARIABLE_LIST: &[&str] = &[
BACKTRACK_CACHE,
BACKTRACK_LEVEL_MAP,
SCHEMA_CAL_MAP,
SCHEMA_CONFIG_NAME,
SCHEMA_CONFIG_META_NAME,
SCHEMA_SELF_NAME,
SCHEMA_ARGS,
SCHEMA_KWARGS,
SCHEMA_RUNTIME_TYPE,
];
pub const BACKTRACK_LEVEL_MAP: &str = "$backtrack_level_map";
pub const BACKTRACK_CACHE: &str = "$backtrack_cache";

Expand Down
1 change: 1 addition & 0 deletions kclvm/makefile
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ COVER_REPORT_FILE_PATH:=$(PWD)/target/llvm-cov/html/index.html
# Generate runtime libraries when the runtime code is changed.
gen-runtime-api:
make -C ./runtime gen-api-spec
make fmt

# Install the wasm target
install-rustc-wasm:
Expand Down
Binary file modified kclvm/runtime/src/_kclvm.bc
Binary file not shown.
20 changes: 3 additions & 17 deletions kclvm/runtime/src/_kclvm.h
Original file line number Diff line number Diff line change
Expand Up @@ -282,20 +282,6 @@ kclvm_value_ref_t* kclvm_datetime_ticks(kclvm_context_t* _ctx, kclvm_value_ref_t

kclvm_value_ref_t* kclvm_datetime_today(kclvm_context_t* _ctx, kclvm_value_ref_t* _args, kclvm_value_ref_t* _kwargs);

void kclvm_debug_hello();

void kclvm_debug_invoke_func(void* fn_ptr);

void kclvm_debug_print(int8_t* cs);

void kclvm_debug_print_str_list(int32_t len, int8_t** ss);

void kclvm_debug_print_type(kclvm_type_t* p);

void kclvm_debug_print_value(kclvm_value_ref_t* p);

void kclvm_debug_print_value_json_string(kclvm_value_ref_t* p);

void kclvm_default_collection_insert_int_pointer(kclvm_value_ref_t* p, kclvm_char_t* key, uint64_t* ptr);

void kclvm_default_collection_insert_value(kclvm_value_ref_t* p, kclvm_char_t* key, kclvm_value_ref_t* value);
Expand Down Expand Up @@ -488,7 +474,7 @@ kclvm_value_ref_t* kclvm_schema_get_value(kclvm_value_ref_t* p, kclvm_char_t* ke

kclvm_value_ref_t* kclvm_schema_instances(kclvm_context_t* ctx, kclvm_value_ref_t* args, kclvm_value_ref_t* kwargs);

kclvm_value_ref_t* kclvm_schema_optional_check(kclvm_value_ref_t* p, kclvm_value_ref_t* v, kclvm_char_t* schema_name, kclvm_value_ref_t* config_meta);
kclvm_value_ref_t* kclvm_schema_optional_check(kclvm_value_ref_t* p);

void kclvm_schema_value_check(kclvm_value_ref_t* schema_value, kclvm_value_ref_t* schema_config, kclvm_value_ref_t* _config_meta, kclvm_char_t* schema_name, kclvm_value_ref_t* index_sign_value, kclvm_char_t* _key_name, kclvm_char_t* key_type, kclvm_char_t* _value_type, kclvm_bool_t _any_other, kclvm_bool_t is_relaxed);

Expand Down Expand Up @@ -636,7 +622,7 @@ kclvm_value_ref_t* kclvm_value_function_external_invoke(kclvm_value_ref_t* p, kc

kclvm_value_ref_t* kclvm_value_function_get_closure(kclvm_value_ref_t* p);

kclvm_value_ref_t* kclvm_value_function_invoke(kclvm_value_ref_t* p, kclvm_context_t* ctx, kclvm_value_ref_t* args, kclvm_value_ref_t* kwargs, kclvm_char_t* pkgpath);
kclvm_value_ref_t* kclvm_value_function_invoke(kclvm_value_ref_t* p, kclvm_context_t* ctx, kclvm_value_ref_t* args, kclvm_value_ref_t* kwargs, kclvm_char_t* pkgpath, kclvm_value_ref_t* is_in_schema);

kclvm_bool_t kclvm_value_function_is_external(kclvm_value_ref_t* p);

Expand Down Expand Up @@ -722,7 +708,7 @@ void kclvm_value_remove_item(kclvm_value_ref_t* a, kclvm_value_ref_t* b);

kclvm_value_ref_t* kclvm_value_schema_function(uint64_t* fn_ptr, uint64_t* check_fn_ptr, kclvm_char_t* tpe);

kclvm_value_ref_t* kclvm_value_schema_with_config(kclvm_value_ref_t* schema_dict, kclvm_value_ref_t* config, kclvm_char_t* name, kclvm_char_t* pkgpath, kclvm_value_ref_t* is_sub_schema, kclvm_value_ref_t* record_instance, kclvm_value_ref_t* instance_pkgpath);
kclvm_value_ref_t* kclvm_value_schema_with_config(kclvm_value_ref_t* schema_dict, kclvm_value_ref_t* config, kclvm_value_ref_t* config_meta, kclvm_char_t* name, kclvm_char_t* pkgpath, kclvm_value_ref_t* is_sub_schema, kclvm_value_ref_t* record_instance, kclvm_value_ref_t* instance_pkgpath, kclvm_value_ref_t* optional_mapping);

kclvm_value_ref_t* kclvm_value_slice(kclvm_value_ref_t* x, kclvm_value_ref_t* a, kclvm_value_ref_t* b, kclvm_value_ref_t* step);

Expand Down
20 changes: 3 additions & 17 deletions kclvm/runtime/src/_kclvm.ll
Original file line number Diff line number Diff line change
Expand Up @@ -230,20 +230,6 @@ declare %kclvm_value_ref_t* @kclvm_datetime_ticks(%kclvm_context_t* %_ctx, %kclv

declare %kclvm_value_ref_t* @kclvm_datetime_today(%kclvm_context_t* %_ctx, %kclvm_value_ref_t* %_args, %kclvm_value_ref_t* %_kwargs);

declare void @kclvm_debug_hello();

declare void @kclvm_debug_invoke_func(i8* %fn_ptr);

declare void @kclvm_debug_print(i8* %cs);

declare void @kclvm_debug_print_str_list(i32 %len, i8** %ss);

declare void @kclvm_debug_print_type(%kclvm_type_t* %p);

declare void @kclvm_debug_print_value(%kclvm_value_ref_t* %p);

declare void @kclvm_debug_print_value_json_string(%kclvm_value_ref_t* %p);

declare void @kclvm_default_collection_insert_int_pointer(%kclvm_value_ref_t* %p, %kclvm_char_t* %key, i64* %ptr);

declare void @kclvm_default_collection_insert_value(%kclvm_value_ref_t* %p, %kclvm_char_t* %key, %kclvm_value_ref_t* %value);
Expand Down Expand Up @@ -436,7 +422,7 @@ declare %kclvm_value_ref_t* @kclvm_schema_get_value(%kclvm_value_ref_t* %p, %kcl

declare %kclvm_value_ref_t* @kclvm_schema_instances(%kclvm_context_t* %ctx, %kclvm_value_ref_t* %args, %kclvm_value_ref_t* %kwargs);

declare %kclvm_value_ref_t* @kclvm_schema_optional_check(%kclvm_value_ref_t* %p, %kclvm_value_ref_t* %v, %kclvm_char_t* %schema_name, %kclvm_value_ref_t* %config_meta);
declare %kclvm_value_ref_t* @kclvm_schema_optional_check(%kclvm_value_ref_t* %p);

declare void @kclvm_schema_value_check(%kclvm_value_ref_t* %schema_value, %kclvm_value_ref_t* %schema_config, %kclvm_value_ref_t* %_config_meta, %kclvm_char_t* %schema_name, %kclvm_value_ref_t* %index_sign_value, %kclvm_char_t* %_key_name, %kclvm_char_t* %key_type, %kclvm_char_t* %_value_type, %kclvm_bool_t %_any_other, %kclvm_bool_t %is_relaxed);

Expand Down Expand Up @@ -584,7 +570,7 @@ declare %kclvm_value_ref_t* @kclvm_value_function_external_invoke(%kclvm_value_r

declare %kclvm_value_ref_t* @kclvm_value_function_get_closure(%kclvm_value_ref_t* %p);

declare %kclvm_value_ref_t* @kclvm_value_function_invoke(%kclvm_value_ref_t* %p, %kclvm_context_t* %ctx, %kclvm_value_ref_t* %args, %kclvm_value_ref_t* %kwargs, %kclvm_char_t* %pkgpath);
declare %kclvm_value_ref_t* @kclvm_value_function_invoke(%kclvm_value_ref_t* %p, %kclvm_context_t* %ctx, %kclvm_value_ref_t* %args, %kclvm_value_ref_t* %kwargs, %kclvm_char_t* %pkgpath, %kclvm_value_ref_t* %is_in_schema);

declare %kclvm_bool_t @kclvm_value_function_is_external(%kclvm_value_ref_t* %p);

Expand Down Expand Up @@ -670,7 +656,7 @@ declare void @kclvm_value_remove_item(%kclvm_value_ref_t* %a, %kclvm_value_ref_t

declare %kclvm_value_ref_t* @kclvm_value_schema_function(i64* %fn_ptr, i64* %check_fn_ptr, %kclvm_char_t* %tpe);

declare %kclvm_value_ref_t* @kclvm_value_schema_with_config(%kclvm_value_ref_t* %schema_dict, %kclvm_value_ref_t* %config, %kclvm_char_t* %name, %kclvm_char_t* %pkgpath, %kclvm_value_ref_t* %is_sub_schema, %kclvm_value_ref_t* %record_instance, %kclvm_value_ref_t* %instance_pkgpath);
declare %kclvm_value_ref_t* @kclvm_value_schema_with_config(%kclvm_value_ref_t* %schema_dict, %kclvm_value_ref_t* %config, %kclvm_value_ref_t* %config_meta, %kclvm_char_t* %name, %kclvm_char_t* %pkgpath, %kclvm_value_ref_t* %is_sub_schema, %kclvm_value_ref_t* %record_instance, %kclvm_value_ref_t* %instance_pkgpath, %kclvm_value_ref_t* %optional_mapping);

declare %kclvm_value_ref_t* @kclvm_value_slice(%kclvm_value_ref_t* %x, %kclvm_value_ref_t* %a, %kclvm_value_ref_t* %b, %kclvm_value_ref_t* %step);

Expand Down
7 changes: 0 additions & 7 deletions kclvm/runtime/src/_kclvm.rs
Original file line number Diff line number Diff line change
Expand Up @@ -127,13 +127,6 @@ pub enum ApiFunc {
kclvm_datetime_now,
kclvm_datetime_ticks,
kclvm_datetime_today,
kclvm_debug_hello,
kclvm_debug_invoke_func,
kclvm_debug_print,
kclvm_debug_print_str_list,
kclvm_debug_print_type,
kclvm_debug_print_value,
kclvm_debug_print_value_json_string,
kclvm_default_collection_insert_int_pointer,
kclvm_default_collection_insert_value,
kclvm_dict_clear,
Expand Down
6 changes: 6 additions & 0 deletions kclvm/runtime/src/_kclvm_addr.rs
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,12 @@ pub fn _kclvm_get_fn_ptr_by_name(name: &str) -> u64 {
"kclvm_datetime_now" => crate::kclvm_datetime_now as *const () as u64,
"kclvm_datetime_ticks" => crate::kclvm_datetime_ticks as *const () as u64,
"kclvm_datetime_today" => crate::kclvm_datetime_today as *const () as u64,
"kclvm_default_collection_insert_int_pointer" => {
crate::kclvm_default_collection_insert_int_pointer as *const () as u64
}
"kclvm_default_collection_insert_value" => {
crate::kclvm_default_collection_insert_value as *const () as u64
}
"kclvm_dict_clear" => crate::kclvm_dict_clear as *const () as u64,
"kclvm_dict_get" => crate::kclvm_dict_get as *const () as u64,
"kclvm_dict_get_entry" => crate::kclvm_dict_get_entry as *const () as u64,
Expand Down
40 changes: 6 additions & 34 deletions kclvm/runtime/src/_kclvm_api_spec.rs
Original file line number Diff line number Diff line change
Expand Up @@ -267,8 +267,8 @@
// api-spec(llvm): declare %kclvm_value_ref_t* @kclvm_value_Schema();

// api-spec: kclvm_value_schema_with_config
// api-spec(c): kclvm_value_ref_t* kclvm_value_schema_with_config(kclvm_value_ref_t* schema_dict, kclvm_value_ref_t* config, kclvm_char_t* name, kclvm_char_t* pkgpath, kclvm_value_ref_t* is_sub_schema, kclvm_value_ref_t* record_instance, kclvm_value_ref_t* instance_pkgpath);
// api-spec(llvm): declare %kclvm_value_ref_t* @kclvm_value_schema_with_config(%kclvm_value_ref_t* %schema_dict, %kclvm_value_ref_t* %config, %kclvm_char_t* %name, %kclvm_char_t* %pkgpath, %kclvm_value_ref_t* %is_sub_schema, %kclvm_value_ref_t* %record_instance, %kclvm_value_ref_t* %instance_pkgpath);
// api-spec(c): kclvm_value_ref_t* kclvm_value_schema_with_config(kclvm_value_ref_t* schema_dict, kclvm_value_ref_t* config, kclvm_value_ref_t* config_meta, kclvm_char_t* name, kclvm_char_t* pkgpath, kclvm_value_ref_t* is_sub_schema, kclvm_value_ref_t* record_instance, kclvm_value_ref_t* instance_pkgpath, kclvm_value_ref_t* optional_mapping);
// api-spec(llvm): declare %kclvm_value_ref_t* @kclvm_value_schema_with_config(%kclvm_value_ref_t* %schema_dict, %kclvm_value_ref_t* %config, %kclvm_value_ref_t* %config_meta, %kclvm_char_t* %name, %kclvm_char_t* %pkgpath, %kclvm_value_ref_t* %is_sub_schema, %kclvm_value_ref_t* %record_instance, %kclvm_value_ref_t* %instance_pkgpath, %kclvm_value_ref_t* %optional_mapping);

// api-spec: kclvm_value_Function
// api-spec(c): kclvm_value_ref_t* kclvm_value_Function(uint64_t* fn_ptr, kclvm_value_ref_t* closure, kclvm_char_t* external_name);
Expand Down Expand Up @@ -355,8 +355,8 @@
// api-spec(llvm): declare %kclvm_value_ref_t* @kclvm_value_function_external_invoke(%kclvm_value_ref_t* %p, %kclvm_value_ref_t* %args, %kclvm_value_ref_t* %kwargs);

// api-spec: kclvm_value_function_invoke
// api-spec(c): kclvm_value_ref_t* kclvm_value_function_invoke(kclvm_value_ref_t* p, kclvm_context_t* ctx, kclvm_value_ref_t* args, kclvm_value_ref_t* kwargs, kclvm_char_t* pkgpath);
// api-spec(llvm): declare %kclvm_value_ref_t* @kclvm_value_function_invoke(%kclvm_value_ref_t* %p, %kclvm_context_t* %ctx, %kclvm_value_ref_t* %args, %kclvm_value_ref_t* %kwargs, %kclvm_char_t* %pkgpath);
// api-spec(c): kclvm_value_ref_t* kclvm_value_function_invoke(kclvm_value_ref_t* p, kclvm_context_t* ctx, kclvm_value_ref_t* args, kclvm_value_ref_t* kwargs, kclvm_char_t* pkgpath, kclvm_value_ref_t* is_in_schema);
// api-spec(llvm): declare %kclvm_value_ref_t* @kclvm_value_function_invoke(%kclvm_value_ref_t* %p, %kclvm_context_t* %ctx, %kclvm_value_ref_t* %args, %kclvm_value_ref_t* %kwargs, %kclvm_char_t* %pkgpath, %kclvm_value_ref_t* %is_in_schema);

// api-spec: kclvm_value_function_get_closure
// api-spec(c): kclvm_value_ref_t* kclvm_value_function_get_closure(kclvm_value_ref_t* p);
Expand Down Expand Up @@ -771,8 +771,8 @@
// api-spec(llvm): declare void @kclvm_schema_do_check_with_index_sign_attr(%kclvm_context_t* %ctx, %kclvm_value_ref_t* %args, %kclvm_value_ref_t* %kwargs, i64* %check_fn_ptr, %kclvm_char_t* %attr_name);

// api-spec: kclvm_schema_optional_check
// api-spec(c): kclvm_value_ref_t* kclvm_schema_optional_check(kclvm_value_ref_t* p, kclvm_value_ref_t* v, kclvm_char_t* schema_name, kclvm_value_ref_t* config_meta);
// api-spec(llvm): declare %kclvm_value_ref_t* @kclvm_schema_optional_check(%kclvm_value_ref_t* %p, %kclvm_value_ref_t* %v, %kclvm_char_t* %schema_name, %kclvm_value_ref_t* %config_meta);
// api-spec(c): kclvm_value_ref_t* kclvm_schema_optional_check(kclvm_value_ref_t* p);
// api-spec(llvm): declare %kclvm_value_ref_t* @kclvm_schema_optional_check(%kclvm_value_ref_t* %p);

// api-spec: kclvm_schema_default_settings
// api-spec(c): void kclvm_schema_default_settings(kclvm_value_ref_t* schema_value, kclvm_value_ref_t* config_value, kclvm_char_t* runtime_type);
Expand Down Expand Up @@ -1134,34 +1134,6 @@
// api-spec(c): void kclvm_assert(kclvm_value_ref_t* value, kclvm_value_ref_t* msg);
// api-spec(llvm): declare void @kclvm_assert(%kclvm_value_ref_t* %value, %kclvm_value_ref_t* %msg);

// api-spec: kclvm_debug_hello
// api-spec(c): void kclvm_debug_hello();
// api-spec(llvm): declare void @kclvm_debug_hello();

// api-spec: kclvm_debug_print
// api-spec(c): void kclvm_debug_print(int8_t* cs);
// api-spec(llvm): declare void @kclvm_debug_print(i8* %cs);

// api-spec: kclvm_debug_print_str_list
// api-spec(c): void kclvm_debug_print_str_list(int32_t len, int8_t** ss);
// api-spec(llvm): declare void @kclvm_debug_print_str_list(i32 %len, i8** %ss);

// api-spec: kclvm_debug_print_type
// api-spec(c): void kclvm_debug_print_type(kclvm_type_t* p);
// api-spec(llvm): declare void @kclvm_debug_print_type(%kclvm_type_t* %p);

// api-spec: kclvm_debug_print_value
// api-spec(c): void kclvm_debug_print_value(kclvm_value_ref_t* p);
// api-spec(llvm): declare void @kclvm_debug_print_value(%kclvm_value_ref_t* %p);

// api-spec: kclvm_debug_print_value_json_string
// api-spec(c): void kclvm_debug_print_value_json_string(kclvm_value_ref_t* p);
// api-spec(llvm): declare void @kclvm_debug_print_value_json_string(%kclvm_value_ref_t* %p);

// api-spec: kclvm_debug_invoke_func
// api-spec(c): void kclvm_debug_invoke_func(void* fn_ptr);
// api-spec(llvm): declare void @kclvm_debug_invoke_func(i8* %fn_ptr);

// api-spec: kclvm_builtin_option_init
// api-spec(c): void kclvm_builtin_option_init(kclvm_context_t* ctx, int8_t* key, int8_t* value);
// api-spec(llvm): declare void @kclvm_builtin_option_init(%kclvm_context_t* %ctx, i8* %key, i8* %value);
Expand Down
Loading