mirror of
https://github.com/roc-lang/roc.git
synced 2025-09-27 13:59:08 +00:00
implement mono / lowering for tuples
This commit is contained in:
parent
65f8bb3d0d
commit
5a6be05ead
42 changed files with 1773 additions and 290 deletions
|
@ -1,10 +1,9 @@
|
|||
use crate::{
|
||||
def::Def,
|
||||
expr::{
|
||||
ClosureData, Expr, Field, OpaqueWrapFunctionData, RecordAccessorData, TupleAccessorData,
|
||||
WhenBranchPattern,
|
||||
ClosureData, Expr, Field, OpaqueWrapFunctionData, StructAccessorData, WhenBranchPattern,
|
||||
},
|
||||
pattern::{DestructType, ListPatterns, Pattern, RecordDestruct},
|
||||
pattern::{DestructType, ListPatterns, Pattern, RecordDestruct, TupleDestruct},
|
||||
};
|
||||
use roc_module::{
|
||||
ident::{Lowercase, TagName},
|
||||
|
@ -513,7 +512,7 @@ fn deep_copy_expr_help<C: CopyEnv>(env: &mut C, copied: &mut Vec<Variable>, expr
|
|||
field: field.clone(),
|
||||
},
|
||||
|
||||
RecordAccessor(RecordAccessorData {
|
||||
RecordAccessor(StructAccessorData {
|
||||
name,
|
||||
function_var,
|
||||
record_var,
|
||||
|
@ -521,7 +520,7 @@ fn deep_copy_expr_help<C: CopyEnv>(env: &mut C, copied: &mut Vec<Variable>, expr
|
|||
ext_var,
|
||||
field_var,
|
||||
field,
|
||||
}) => RecordAccessor(RecordAccessorData {
|
||||
}) => RecordAccessor(StructAccessorData {
|
||||
name: *name,
|
||||
function_var: sub!(*function_var),
|
||||
record_var: sub!(*record_var),
|
||||
|
@ -545,24 +544,6 @@ fn deep_copy_expr_help<C: CopyEnv>(env: &mut C, copied: &mut Vec<Variable>, expr
|
|||
index: *index,
|
||||
},
|
||||
|
||||
TupleAccessor(TupleAccessorData {
|
||||
name,
|
||||
function_var,
|
||||
tuple_var: record_var,
|
||||
closure_var,
|
||||
ext_var,
|
||||
elem_var: field_var,
|
||||
index,
|
||||
}) => TupleAccessor(TupleAccessorData {
|
||||
name: *name,
|
||||
function_var: sub!(*function_var),
|
||||
tuple_var: sub!(*record_var),
|
||||
closure_var: sub!(*closure_var),
|
||||
ext_var: sub!(*ext_var),
|
||||
elem_var: sub!(*field_var),
|
||||
index: *index,
|
||||
}),
|
||||
|
||||
RecordUpdate {
|
||||
record_var,
|
||||
ext_var,
|
||||
|
@ -794,6 +775,30 @@ fn deep_copy_pattern_help<C: CopyEnv>(
|
|||
})
|
||||
.collect(),
|
||||
},
|
||||
TupleDestructure {
|
||||
whole_var,
|
||||
ext_var,
|
||||
destructs,
|
||||
} => TupleDestructure {
|
||||
whole_var: sub!(*whole_var),
|
||||
ext_var: sub!(*ext_var),
|
||||
destructs: destructs
|
||||
.iter()
|
||||
.map(|lrd| {
|
||||
lrd.map(
|
||||
|TupleDestruct {
|
||||
destruct_index: index,
|
||||
var,
|
||||
typ: (tyvar, pat),
|
||||
}: &crate::pattern::TupleDestruct| TupleDestruct {
|
||||
destruct_index: *index,
|
||||
var: sub!(*var),
|
||||
typ: (sub!(*tyvar), pat.map(|p| go_help!(p))),
|
||||
},
|
||||
)
|
||||
})
|
||||
.collect(),
|
||||
},
|
||||
List {
|
||||
list_var,
|
||||
elem_var,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue