fix minor scope issue
This commit is contained in:
parent
e3267310c5
commit
6870a5cab7
|
@ -83,7 +83,7 @@ impl Default for ScopeLevels {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, Eq, PartialEq, Hash)]
|
#[derive(Clone, Eq, Debug, PartialEq, Hash)]
|
||||||
pub struct ConstrFieldKey {
|
pub struct ConstrFieldKey {
|
||||||
pub local_var: String,
|
pub local_var: String,
|
||||||
pub field_name: String,
|
pub field_name: String,
|
||||||
|
@ -103,7 +103,7 @@ pub struct FunctionAccessKey {
|
||||||
pub function_name: String,
|
pub function_name: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone)]
|
#[derive(Clone, Debug)]
|
||||||
pub struct ConstrConversionInfo {
|
pub struct ConstrConversionInfo {
|
||||||
local_var: String,
|
local_var: String,
|
||||||
field: Option<String>,
|
field: Option<String>,
|
||||||
|
@ -112,7 +112,7 @@ pub struct ConstrConversionInfo {
|
||||||
returning_type: String,
|
returning_type: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone)]
|
#[derive(Clone, Debug)]
|
||||||
pub struct ScopedExpr {
|
pub struct ScopedExpr {
|
||||||
scope: ScopeLevels,
|
scope: ScopeLevels,
|
||||||
expr: TypedExpr,
|
expr: TypedExpr,
|
||||||
|
@ -169,6 +169,13 @@ impl<'a> CodeGenerator<'a> {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
println!("DATA HOLDER LOOKUP{:#?}", self.uplc_data_holder_lookup);
|
||||||
|
|
||||||
|
println!(
|
||||||
|
"DATA USAGE HOLDER {:#?}",
|
||||||
|
self.uplc_data_usage_holder_lookup
|
||||||
|
);
|
||||||
|
|
||||||
let mut term = self.recurse_code_gen(&body, ScopeLevels::new());
|
let mut term = self.recurse_code_gen(&body, ScopeLevels::new());
|
||||||
|
|
||||||
// Apply constr exposer to top level.
|
// Apply constr exposer to top level.
|
||||||
|
@ -250,7 +257,7 @@ impl<'a> CodeGenerator<'a> {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn recurse_scope_level(&mut self, body: &TypedExpr, scope_level: ScopeLevels) {
|
pub(crate) fn recurse_scope_level(&mut self, body: &TypedExpr, scope_level: ScopeLevels) {
|
||||||
match body {
|
match dbg!(body) {
|
||||||
TypedExpr::Int { .. } => {}
|
TypedExpr::Int { .. } => {}
|
||||||
TypedExpr::String { .. } => {}
|
TypedExpr::String { .. } => {}
|
||||||
TypedExpr::ByteArray { .. } => {}
|
TypedExpr::ByteArray { .. } => {}
|
||||||
|
@ -330,7 +337,7 @@ impl<'a> CodeGenerator<'a> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
TypedExpr::Call { fun, args, .. } => {
|
TypedExpr::Call { fun, args, .. } => {
|
||||||
self.recurse_scope_level(fun, scope_level.scope_increment(1));
|
self.recurse_scope_level(fun, scope_level.clone());
|
||||||
|
|
||||||
for (index, arg) in args.iter().enumerate() {
|
for (index, arg) in args.iter().enumerate() {
|
||||||
self.recurse_scope_level(
|
self.recurse_scope_level(
|
||||||
|
@ -343,13 +350,11 @@ impl<'a> CodeGenerator<'a> {
|
||||||
self.recurse_scope_level(left, scope_level.clone());
|
self.recurse_scope_level(left, scope_level.clone());
|
||||||
self.recurse_scope_level(right, scope_level);
|
self.recurse_scope_level(right, scope_level);
|
||||||
}
|
}
|
||||||
TypedExpr::Assignment { value, pattern, .. } => self.recurse_scope_level_pattern(
|
TypedExpr::Assignment { value, pattern, .. } => {
|
||||||
pattern,
|
self.recurse_scope_level_pattern(pattern, value, scope_level, &[])
|
||||||
value,
|
}
|
||||||
scope_level.scope_increment(1),
|
|
||||||
&[],
|
|
||||||
),
|
|
||||||
TypedExpr::Trace {..} => todo!(),
|
TypedExpr::Trace {..} => todo!(),
|
||||||
|
TypedExpr::Try { .. } => todo!(),
|
||||||
TypedExpr::When {
|
TypedExpr::When {
|
||||||
subjects, clauses, ..
|
subjects, clauses, ..
|
||||||
} => {
|
} => {
|
||||||
|
@ -600,7 +605,7 @@ impl<'a> CodeGenerator<'a> {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
let module = module.clone().unwrap();
|
let module = module.clone().unwrap_or_default();
|
||||||
// TODO: support multiple subjects
|
// TODO: support multiple subjects
|
||||||
let (var_name, tipo) = match &vars[0] {
|
let (var_name, tipo) = match &vars[0] {
|
||||||
TypedExpr::Var {
|
TypedExpr::Var {
|
||||||
|
@ -780,8 +785,8 @@ impl<'a> CodeGenerator<'a> {
|
||||||
let mut term = self
|
let mut term = self
|
||||||
.recurse_code_gen(exp, scope_level.scope_increment_sequence(i as i32 + 1));
|
.recurse_code_gen(exp, scope_level.scope_increment_sequence(i as i32 + 1));
|
||||||
|
|
||||||
term = self
|
term =
|
||||||
.maybe_insert_def(term, scope_level.scope_increment_sequence(i as i32 + 1));
|
self.maybe_insert_def(term, scope_level.scope_increment_sequence(i as i32));
|
||||||
|
|
||||||
self.uplc_function_holder
|
self.uplc_function_holder
|
||||||
.push((String::new(), term.clone()));
|
.push((String::new(), term.clone()));
|
||||||
|
@ -1590,7 +1595,8 @@ impl<'a> CodeGenerator<'a> {
|
||||||
}
|
}
|
||||||
Pattern::List { .. } => None,
|
Pattern::List { .. } => None,
|
||||||
Pattern::Discard { .. } => None,
|
Pattern::Discard { .. } => None,
|
||||||
_ => todo!(),
|
Pattern::Int { .. } => None,
|
||||||
|
rest => todo!("{rest:?}"),
|
||||||
};
|
};
|
||||||
|
|
||||||
if let Some(key) = key {
|
if let Some(key) = key {
|
||||||
|
@ -1655,7 +1661,14 @@ impl<'a> CodeGenerator<'a> {
|
||||||
|
|
||||||
(index.unwrap_or(dt.constructors.len()), current_term)
|
(index.unwrap_or(dt.constructors.len()), current_term)
|
||||||
}
|
}
|
||||||
_ => todo!(),
|
Pattern::Discard { .. } => (
|
||||||
|
dt.constructors.len(),
|
||||||
|
self.recurse_code_gen(
|
||||||
|
&clause.then,
|
||||||
|
scope_level.scope_increment_sequence(1),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
rest => todo!("{rest:?}"),
|
||||||
};
|
};
|
||||||
pair
|
pair
|
||||||
})
|
})
|
||||||
|
@ -1753,7 +1766,7 @@ impl<'a> CodeGenerator<'a> {
|
||||||
// Skip first type since we know we have a list
|
// Skip first type since we know we have a list
|
||||||
let tipo = match subject {
|
let tipo = match subject {
|
||||||
TypedExpr::Var { constructor, .. } => &constructor.tipo,
|
TypedExpr::Var { constructor, .. } => &constructor.tipo,
|
||||||
_ => todo!(),
|
rest => todo!("{rest:?}"),
|
||||||
};
|
};
|
||||||
let mut current_tipo = match (**tipo).clone() {
|
let mut current_tipo = match (**tipo).clone() {
|
||||||
Type::App { args, .. } => (*args[0]).clone(),
|
Type::App { args, .. } => (*args[0]).clone(),
|
||||||
|
@ -2672,6 +2685,9 @@ impl<'a> CodeGenerator<'a> {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
println!("SCOPE LEVEL IS {scope_level:#?}");
|
||||||
|
println!("DATA HOLDER COMBINED {:#?}", data_holder);
|
||||||
|
|
||||||
for ConstrConversionInfo {
|
for ConstrConversionInfo {
|
||||||
local_var,
|
local_var,
|
||||||
field,
|
field,
|
||||||
|
|
Loading…
Reference in New Issue