mirror of
https://github.com/apple/pkl.git
synced 2026-08-26 21:54:03 +02:00
Fix bug in force (#1790)
This commit is contained in:
@@ -156,8 +156,11 @@ public abstract class VmObject extends VmObjectLike {
|
|||||||
public final void force(boolean allowUndefinedValues, boolean recurse) {
|
public final void force(boolean allowUndefinedValues, boolean recurse) {
|
||||||
if (forced) return;
|
if (forced) return;
|
||||||
|
|
||||||
|
// set eagerly to break reference cycles
|
||||||
if (recurse) forced = true;
|
if (recurse) forced = true;
|
||||||
|
|
||||||
|
var fullyForced = true;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
for (VmObjectLike owner = this; owner != null; owner = owner.getParent()) {
|
for (VmObjectLike owner = this; owner != null; owner = owner.getParent()) {
|
||||||
var cursor = EconomicMaps.getEntries(owner.getMembers());
|
var cursor = EconomicMaps.getEntries(owner.getMembers());
|
||||||
@@ -177,6 +180,7 @@ public abstract class VmObject extends VmObjectLike {
|
|||||||
memberValue = VmUtils.doReadMember(this, owner, memberKey, member);
|
memberValue = VmUtils.doReadMember(this, owner, memberKey, member);
|
||||||
} catch (VmUndefinedValueException e) {
|
} catch (VmUndefinedValueException e) {
|
||||||
if (!allowUndefinedValues) throw e;
|
if (!allowUndefinedValues) throw e;
|
||||||
|
fullyForced = false;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -190,6 +194,9 @@ public abstract class VmObject extends VmObjectLike {
|
|||||||
forced = false;
|
forced = false;
|
||||||
throw t;
|
throw t;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// make sure uncached values are not marked as forced
|
||||||
|
if (recurse && !fullyForced) forced = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Vendored
+21
@@ -0,0 +1,21 @@
|
|||||||
|
undefinedValue: String
|
||||||
|
|
||||||
|
items = new Listing {
|
||||||
|
undefinedValue
|
||||||
|
}
|
||||||
|
|
||||||
|
lookup = new Mapping {
|
||||||
|
["x"] = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
result =
|
||||||
|
let (_ = trace(items))
|
||||||
|
new Listing {
|
||||||
|
for (item in items) {
|
||||||
|
lookup.containsKey(item)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
output {
|
||||||
|
value = result
|
||||||
|
}
|
||||||
Vendored
+27
@@ -0,0 +1,27 @@
|
|||||||
|
–– Pkl Error ––
|
||||||
|
Tried to read property `undefinedValue` but its value is undefined.
|
||||||
|
|
||||||
|
x | undefinedValue: String
|
||||||
|
^^^^^^^^^^^^^^
|
||||||
|
at traceThenIterateUndefinedMember#undefinedValue (file:///$snippetsDir/input/errors/traceThenIterateUndefinedMember.pkl)
|
||||||
|
|
||||||
|
x | undefinedValue
|
||||||
|
^^^^^^^^^^^^^^
|
||||||
|
at traceThenIterateUndefinedMember#items[#1] (file:///$snippetsDir/input/errors/traceThenIterateUndefinedMember.pkl)
|
||||||
|
|
||||||
|
xx | let (_ = trace(items))
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
at traceThenIterateUndefinedMember#result.<let expr> (file:///$snippetsDir/input/errors/traceThenIterateUndefinedMember.pkl)
|
||||||
|
|
||||||
|
xx | value = result
|
||||||
|
^^^^^^
|
||||||
|
at traceThenIterateUndefinedMember#output.value (file:///$snippetsDir/input/errors/traceThenIterateUndefinedMember.pkl)
|
||||||
|
|
||||||
|
xxx | renderer.renderDocument(value)
|
||||||
|
^^^^^
|
||||||
|
at pkl.base#Module.output.text (pkl:base)
|
||||||
|
|
||||||
|
xxx | if (renderer is BytesRenderer) renderer.renderDocument(value) else text.encodeToBytes("UTF-8")
|
||||||
|
^^^^
|
||||||
|
at pkl.base#Module.output.bytes (pkl:base)
|
||||||
|
pkl: TRACE: items = new Listing { ? } (file:///$snippetsDir/input/errors/traceThenIterateUndefinedMember.pkl)
|
||||||
Reference in New Issue
Block a user