aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--patio-to-cranelift/src/codegen/mod.rs24
-rw-r--r--patio-to-cranelift/src/patio/compilation_unit.rs12
-rw-r--r--patio-to-cranelift/src/patio/flatbuffers.rs14
3 files changed, 45 insertions, 5 deletions
diff --git a/patio-to-cranelift/src/codegen/mod.rs b/patio-to-cranelift/src/codegen/mod.rs
index 798c0381..316c9e2a 100644
--- a/patio-to-cranelift/src/codegen/mod.rs
+++ b/patio-to-cranelift/src/codegen/mod.rs
@@ -11,8 +11,9 @@ use crate::{
patio::{
compilation_unit::{
PatioCompilationUnit, PatioCompilationUnitElement, PatioDataElementImmutableDefinition,
- PatioDataElementMutableDefinition, PatioFunctionDeclaration, PatioFunctionDefinition,
- PatioLocal, PatioLocalType, PatioVisibility,
+ PatioDataElementMutableDeclaration, PatioDataElementMutableDefinition,
+ PatioFunctionDeclaration, PatioFunctionDefinition, PatioLocal, PatioLocalType,
+ PatioVisibility,
},
instructions::{
PatioBlock, PatioBoolToInt, PatioCall, PatioCallPointer, PatioDataPtrToInt, PatioIf,
@@ -88,6 +89,12 @@ fn declare_compilation_unit_element(
declare_data_element_immutable_definition(data_element_immutable_definition, context);
}
+ PatioCompilationUnitElement::DataElementMutableDeclaration(
+ data_element_mutable_declaration,
+ ) => {
+ declare_data_element_mutable_declaration(data_element_mutable_declaration, context);
+ }
+
PatioCompilationUnitElement::DataElementMutableDefinition(
data_element_mutable_definition,
) => {
@@ -115,6 +122,8 @@ fn define_compilation_unit_element(
define_data_element_immutable_definition(data_element_immutable_definition, context);
}
+ PatioCompilationUnitElement::DataElementMutableDeclaration(_) => {}
+
PatioCompilationUnitElement::DataElementMutableDefinition(
data_element_mutable_definition,
) => {
@@ -151,6 +160,17 @@ fn define_data_element_immutable_definition(
context.define_data(&data_element_immutable_definition.name, bytes);
}
+fn declare_data_element_mutable_declaration(
+ data_element_mutable_declaration: &PatioDataElementMutableDeclaration,
+ context: &mut CompilerContext,
+) {
+ context.declare_data(
+ &data_element_mutable_declaration.name,
+ cranelift_module::Linkage::Import,
+ Mutability::Mutable,
+ );
+}
+
fn declare_data_element_mutable_definition(
data_element_mutable_definition: &PatioDataElementMutableDefinition,
context: &mut CompilerContext,
diff --git a/patio-to-cranelift/src/patio/compilation_unit.rs b/patio-to-cranelift/src/patio/compilation_unit.rs
index d7bd06e8..ecf80558 100644
--- a/patio-to-cranelift/src/patio/compilation_unit.rs
+++ b/patio-to-cranelift/src/patio/compilation_unit.rs
@@ -1,4 +1,8 @@
-use crate::patio::{instructions::PatioInstruction, types::PatioType, values::PatioDataValue};
+use crate::patio::{
+ instructions::PatioInstruction,
+ types::{PatioDataLayout, PatioType},
+ values::PatioDataValue,
+};
pub(crate) struct PatioCompilationUnit {
pub(crate) elements: Vec<PatioCompilationUnitElement>,
@@ -7,6 +11,7 @@ pub(crate) struct PatioCompilationUnit {
pub(crate) enum PatioCompilationUnitElement {
DataElementImmutableDefinition(PatioDataElementImmutableDefinition),
DataElementMutableDefinition(PatioDataElementMutableDefinition),
+ DataElementMutableDeclaration(PatioDataElementMutableDeclaration),
FunctionDeclaration(PatioFunctionDeclaration),
FunctionDefinition(PatioFunctionDefinition),
}
@@ -23,6 +28,11 @@ pub(crate) struct PatioDataElementMutableDefinition {
pub(crate) initial_value: PatioDataValue,
}
+pub(crate) struct PatioDataElementMutableDeclaration {
+ pub(crate) name: String,
+ pub(crate) layout: PatioDataLayout,
+}
+
pub(crate) struct PatioFunctionDeclaration {
pub(crate) name: String,
pub(crate) params: Vec<PatioLocal>,
diff --git a/patio-to-cranelift/src/patio/flatbuffers.rs b/patio-to-cranelift/src/patio/flatbuffers.rs
index 69720b19..900a2c4c 100644
--- a/patio-to-cranelift/src/patio/flatbuffers.rs
+++ b/patio-to-cranelift/src/patio/flatbuffers.rs
@@ -2,8 +2,9 @@ use crate::{
patio::{
compilation_unit::{
PatioCompilationUnit, PatioCompilationUnitElement, PatioDataElementImmutableDefinition,
- PatioDataElementMutableDefinition, PatioFunctionDeclaration, PatioFunctionDefinition,
- PatioLocal, PatioLocalType, PatioVisibility,
+ PatioDataElementMutableDeclaration, PatioDataElementMutableDefinition,
+ PatioFunctionDeclaration, PatioFunctionDefinition, PatioLocal, PatioLocalType,
+ PatioVisibility,
},
instructions::{
PatioBlock, PatioBoolToInt, PatioCall, PatioCallPointer, PatioDataPtrToInt, PatioIf,
@@ -47,6 +48,15 @@ impl From<patio_generated::patio::PatioCompilationUnitElement<'_>> for PatioComp
})
}
+ patio_generated::patio::PatioCompilationUnitElementValue::PatioDataElementMutableDeclaration => {
+ let data_element_mutable_declaration = value.value_as_patio_data_element_mutable_declaration().unwrap();
+
+ Self::DataElementMutableDeclaration(PatioDataElementMutableDeclaration {
+ name: data_element_mutable_declaration.name().to_string(),
+ layout: data_element_mutable_declaration.layout().into(),
+ })
+ }
+
patio_generated::patio::PatioCompilationUnitElementValue::PatioDataElementMutableDefinition => {
let data_element_mutable_definition = value.value_as_patio_data_element_mutable_definition().unwrap();