lib/modules: optimize performance by inlining bindings

This commit is contained in:
Johannes Kirschbauer 2025-06-06 17:07:17 +02:00
commit ebafc3eb74
No known key found for this signature in database
2 changed files with 48 additions and 41 deletions

View file

@ -1503,23 +1503,27 @@ let
v2 =
{ loc, defs }:
let
isMergeV2 = coercedType.merge ? v2;
coerceDef =
def:
let
merged = coercedType.merge.v2 {
inherit loc;
defs = [ def ];
};
in
if isMergeV2 then
if merged.headError == null then coerceFunc def.value else def.value
else if coercedType.check def.value then
coerceFunc def.value
else
def.value;
finalDefs = (map (def: def // { value = coerceDef def; }) defs);
finalDefs = (
map (
def:
def
// {
value =
let
merged = coercedType.merge.v2 {
inherit loc;
defs = [ def ];
};
in
if coercedType.merge ? v2 then
if merged.headError == null then coerceFunc def.value else def.value
else if coercedType.check def.value then
coerceFunc def.value
else
def.value;
}
) defs
);
in
if finalType.merge ? v2 then
finalType.merge.v2 {
@ -1530,7 +1534,7 @@ let
{
value = finalType.merge loc finalDefs;
valueMeta = { };
headError = checkDefsForError check loc finalDefs;
headError = checkDefsForError check loc defs;
};
};
emptyValue = finalType.emptyValue;