mirror of
https://github.com/roc-lang/roc.git
synced 2025-10-03 00:24:34 +00:00
add record_var to Access and Accessor
This commit is contained in:
parent
e62ddc9ef5
commit
b43be95b19
5 changed files with 67 additions and 35 deletions
|
@ -1141,6 +1141,7 @@ pub fn constrain_expr(
|
|||
}
|
||||
|
||||
Access {
|
||||
record_var,
|
||||
ext_var,
|
||||
field_var,
|
||||
loc_expr,
|
||||
|
@ -1163,6 +1164,8 @@ pub fn constrain_expr(
|
|||
);
|
||||
|
||||
let record_expected = Expected::NoExpectation(record_type);
|
||||
let record_con = Eq(Type::Variable(*record_var), record_expected.clone(), region);
|
||||
|
||||
let inner_constraint = constrain_expr(
|
||||
env,
|
||||
var_store,
|
||||
|
@ -1174,13 +1177,24 @@ pub fn constrain_expr(
|
|||
);
|
||||
|
||||
exists(
|
||||
vec![*field_var, *ext_var, field_uniq_var, record_uniq_var],
|
||||
And(vec![Eq(field_type, expected, region), inner_constraint]),
|
||||
vec![
|
||||
*record_var,
|
||||
*field_var,
|
||||
*ext_var,
|
||||
field_uniq_var,
|
||||
record_uniq_var,
|
||||
],
|
||||
And(vec![
|
||||
Eq(field_type, expected, region),
|
||||
inner_constraint,
|
||||
record_con,
|
||||
]),
|
||||
)
|
||||
}
|
||||
|
||||
Accessor {
|
||||
field,
|
||||
record_var,
|
||||
field_var,
|
||||
ext_var,
|
||||
} => {
|
||||
|
@ -1200,6 +1214,9 @@ pub fn constrain_expr(
|
|||
Type::Record(field_types, Box::new(Type::Variable(*ext_var))),
|
||||
);
|
||||
|
||||
let record_expected = Expected::NoExpectation(record_type.clone());
|
||||
let record_con = Eq(Type::Variable(*record_var), record_expected, region);
|
||||
|
||||
let fn_uniq_var = var_store.fresh();
|
||||
let fn_type = attr_type(
|
||||
Bool::variable(fn_uniq_var),
|
||||
|
@ -1208,13 +1225,14 @@ pub fn constrain_expr(
|
|||
|
||||
exists(
|
||||
vec![
|
||||
*record_var,
|
||||
*field_var,
|
||||
*ext_var,
|
||||
fn_uniq_var,
|
||||
field_uniq_var,
|
||||
record_uniq_var,
|
||||
],
|
||||
And(vec![Eq(fn_type, expected, region)]),
|
||||
And(vec![Eq(fn_type, expected, region), record_con]),
|
||||
)
|
||||
}
|
||||
RuntimeError(_) => True,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue