Skip to main content

yulang_native/
lib.rs

1//! Native backend skeleton for Yulang.
2//!
3//! This crate starts with a small control IR boundary.  Cranelift codegen will
4//! sit behind this boundary later; for now the important behavior is that
5//! supported runtime IR lowers explicitly and unsupported runtime IR fails with
6//! a structured reason.
7
8pub mod abi;
9pub mod abi_eval;
10pub mod abi_format;
11pub mod abi_lane;
12pub mod abi_subset;
13pub mod abi_validate;
14pub mod backend_selection;
15pub mod closure;
16pub mod compare;
17pub mod control_ir;
18pub mod cps_capture;
19pub mod cps_closure;
20pub mod cps_compare;
21pub mod cps_effectful_calls;
22pub mod cps_env;
23pub mod cps_eval;
24pub mod cps_frame_trace;
25pub mod cps_ir;
26pub mod cps_lower;
27pub mod cps_optimize;
28pub mod cps_repr;
29pub mod cps_repr_abi;
30pub mod cps_repr_cranelift;
31pub mod cps_validate;
32pub mod cranelift;
33pub mod eval;
34pub mod lower;
35pub mod native_runtime;
36pub mod value_cranelift;
37
38pub use abi::{
39    NativeAbiBlock, NativeAbiFunction, NativeAbiModule, NativeAbiStmt, lower_closure_module_to_abi,
40};
41pub use abi_eval::{NativeAbiEvalError, NativeAbiEvalResult, eval_abi_module};
42pub use abi_format::format_abi_module;
43pub use abi_lane::{
44    NativeAbiLaneAnalysis, NativeAbiRepr, NativeAbiReprAnalysis, NativeAbiValueLane,
45    NativeRuntimePtrKind, analyze_abi_reprs, analyze_abi_value_lanes,
46};
47pub use abi_subset::{NativeAbiSubsetError, validate_cranelift_prototype_subset};
48pub use abi_validate::{NativeAbiValidateError, validate_abi_module};
49pub use backend_selection::{
50    NativeBackendPlan, NativeBackendReason, NativeBackendReasonKind, NativeBackendSelection,
51    NativeRootBackend, NativeRootLabel, select_native_backends,
52};
53pub use closure::{
54    NativeClosureAbi, NativeClosureBlock, NativeClosureCapture, NativeClosureCodeRef,
55    NativeClosureEnvRef, NativeClosureEnvironment, NativeClosureFunction, NativeClosureModule,
56    NativeClosureSlot, NativeClosureStmt, closure_convert_module,
57};
58pub use compare::{
59    NativeCompareError, NativeSourceCompareError, NativeValueCompareError, compare_module,
60    compare_module_i64, compare_module_value,
61};
62pub use control_ir::{
63    BlockId, NativeBlock, NativeFunction, NativeLiteral, NativeModule, NativeStmt,
64    NativeTerminator, ValueId,
65};
66pub use cps_capture::infer_cps_captures;
67pub use cps_closure::{
68    CpsClosureContinuation, CpsClosureFunction, CpsClosureModule, closure_convert_cps_module,
69};
70pub use cps_compare::{
71    CpsCompareError, CpsReprI64CompareReport, CpsReprI64RootCompare, compare_cps_module,
72    compare_cps_repr_cranelift_i64, compare_cps_repr_cranelift_i64_report,
73};
74pub use cps_effectful_calls::reify_effectful_direct_calls;
75pub use cps_env::{
76    CpsContinuationEnvironmentLayout, CpsEnvironmentLayout, CpsEnvironmentSlot,
77    CpsFunctionEnvironmentLayout, layout_cps_environments,
78};
79pub use cps_eval::{CpsEvalError, eval_cps_module};
80pub use cps_frame_trace::{
81    CpsFrameTraceEvent, CpsFrameTraceLayer, CpsFrameTraceSlot, with_cps_frame_trace,
82};
83pub use cps_ir::{
84    CpsContinuation, CpsContinuationId, CpsFunction, CpsHandler, CpsHandlerArm,
85    CpsHandlerContextId, CpsHandlerId, CpsLiteral, CpsModule, CpsShotKind, CpsStmt, CpsTerminator,
86    CpsValueId,
87};
88pub use cps_lower::{CpsLowerError, CpsLowerResult, lower_cps_module};
89pub use cps_optimize::{
90    CpsOptimizationOutput, CpsOptimizationProfile, optimize_cps_repr_abi_module,
91};
92pub use cps_repr::{
93    CpsReprAbiAnalysis, CpsReprAbiLane, CpsReprContinuation, CpsReprEnvironmentSlot,
94    CpsReprEvalError, CpsReprFunction, CpsReprFunctionAbiAnalysis, CpsReprFunctionValueAnalysis,
95    CpsReprModule, CpsReprValueAnalysis, CpsReprValueKind, analyze_cps_repr_abi_lanes,
96    analyze_cps_repr_values, eval_cps_repr_module, lower_cps_repr_module,
97};
98pub use cps_repr_abi::{
99    CpsReprAbiContinuation, CpsReprAbiEnvironmentSlot, CpsReprAbiFunction, CpsReprAbiHandler,
100    CpsReprAbiHandlerArm, CpsReprAbiModule, CpsReprAbiValue, lower_cps_repr_abi_module,
101};
102pub use cps_repr_cranelift::{
103    CpsReprCraneliftError, CpsReprJitModule, CpsReprObjectModule, compile_cps_repr_abi_module,
104    compile_cps_repr_abi_module_to_object, compile_runtime_module_to_cps_repr_jit,
105    compile_runtime_module_to_cps_repr_object,
106};
107pub use cps_validate::{CpsValidateError, validate_cps_module};
108pub use cranelift::{
109    NativeCraneliftError, NativeJitModule, NativeObjectModule, compile_abi_module,
110    compile_abi_module_to_object,
111};
112pub use eval::{NativeEvalError, eval_module};
113pub use lower::{NativeLowerError, NativeLowerResult, lower_module};
114pub use native_runtime::{
115    NativeRuntimeContext, bool_is_true as native_runtime_bool_is_true,
116    concat_string as native_runtime_concat_string, list_empty as native_runtime_list_empty,
117    list_index as native_runtime_list_index, list_len as native_runtime_list_len,
118    list_merge as native_runtime_list_merge, list_singleton as native_runtime_list_singleton,
119    list_view_raw as native_runtime_list_view_raw, make_bool as native_runtime_make_bool,
120    make_float as native_runtime_make_float, make_int as native_runtime_make_int,
121    make_string as native_runtime_make_string, make_unit as native_runtime_make_unit,
122    record_empty as native_runtime_record_empty, record_insert as native_runtime_record_insert,
123    record_select as native_runtime_record_select, tuple_empty as native_runtime_tuple_empty,
124    tuple_get as native_runtime_tuple_get, tuple_push as native_runtime_tuple_push,
125    variant as native_runtime_variant, variant_payload as native_runtime_variant_payload,
126    variant_tag_eq as native_runtime_variant_tag_eq, yulang_native_bool_is_true,
127    yulang_native_concat_string, yulang_native_context_free, yulang_native_context_new,
128    yulang_native_list_empty, yulang_native_list_index, yulang_native_list_index_range,
129    yulang_native_list_index_range_raw, yulang_native_list_len, yulang_native_list_merge,
130    yulang_native_list_singleton, yulang_native_list_splice, yulang_native_list_splice_raw,
131    yulang_native_list_view_raw, yulang_native_make_bool, yulang_native_make_float,
132    yulang_native_make_int, yulang_native_make_string, yulang_native_make_unit,
133    yulang_native_print_value, yulang_native_record_empty, yulang_native_record_insert,
134    yulang_native_record_select, yulang_native_string_index_range,
135    yulang_native_string_index_range_raw, yulang_native_string_splice,
136    yulang_native_string_splice_raw, yulang_native_tuple_empty, yulang_native_tuple_get,
137    yulang_native_tuple_push, yulang_native_variant, yulang_native_variant_payload,
138    yulang_native_variant_tag_eq,
139};
140pub use value_cranelift::{
141    NativeValueCraneliftError, NativeValueJitModule, NativeValueObjectModule,
142    compile_value_abi_module, compile_value_abi_module_to_object,
143};