Skip to content

Commit d5dc6e1

Browse files
committed
Do not initialize lazy data properties in v8::Object::GetPropertyNames().
1 parent 70409f7 commit d5dc6e1

File tree

1 file changed

+15
-4
lines changed
  • graal-nodejs/mx.graal-nodejs/com.oracle.truffle.trufflenode/src/com/oracle/truffle/trufflenode

1 file changed

+15
-4
lines changed

graal-nodejs/mx.graal-nodejs/com.oracle.truffle.trufflenode/src/com/oracle/truffle/trufflenode/GraalJSAccess.java

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,7 @@
159159
import com.oracle.truffle.api.nodes.UnexpectedResultException;
160160
import com.oracle.truffle.api.object.DynamicObjectLibrary;
161161
import com.oracle.truffle.api.object.HiddenKey;
162+
import com.oracle.truffle.api.object.Property;
162163
import com.oracle.truffle.api.source.Source;
163164
import com.oracle.truffle.api.source.SourceSection;
164165
import com.oracle.truffle.api.strings.TruffleString;
@@ -255,6 +256,7 @@
255256
import com.oracle.truffle.js.runtime.objects.JSObject;
256257
import com.oracle.truffle.js.runtime.objects.JSObjectUtil;
257258
import com.oracle.truffle.js.runtime.objects.JSOrdinaryObject;
259+
import com.oracle.truffle.js.runtime.objects.JSProperty;
258260
import com.oracle.truffle.js.runtime.objects.Null;
259261
import com.oracle.truffle.js.runtime.objects.PromiseCapabilityRecord;
260262
import com.oracle.truffle.js.runtime.objects.PropertyDescriptor;
@@ -1157,6 +1159,7 @@ public Object objectGetPropertyNames(Object object, boolean ownOnly,
11571159
JSDynamicObject dynamicObject = (JSDynamicObject) object;
11581160
do {
11591161
JSClass jsclass = JSObject.getJSClass(dynamicObject);
1162+
boolean ordinaryGetOwnProperty = jsclass.usesOrdinaryGetOwnProperty();
11601163
Iterable<Object> ownKeys = jsclass.ownPropertyKeys(dynamicObject);
11611164
for (Object key : ownKeys) {
11621165
Object keyToStore = key;
@@ -1179,10 +1182,18 @@ public Object objectGetPropertyNames(Object object, boolean ownOnly,
11791182
continue;
11801183
}
11811184
}
1182-
PropertyDescriptor desc = jsclass.getOwnProperty(dynamicObject, key);
1183-
if ((enumerableOnly && (desc == null || !desc.getEnumerable())) || (configurableOnly && (desc == null || !desc.getConfigurable())) ||
1184-
(writableOnly && (desc == null || !desc.getWritable()))) {
1185-
continue;
1185+
if (ordinaryGetOwnProperty) {
1186+
Property prop = dynamicObject.getShape().getProperty(key);
1187+
if ((enumerableOnly && (prop == null || !JSProperty.isEnumerable(prop))) || (configurableOnly && (prop == null || !JSProperty.isConfigurable(prop))) ||
1188+
(writableOnly && (prop == null || !JSProperty.isWritable(prop)))) {
1189+
continue;
1190+
}
1191+
} else {
1192+
PropertyDescriptor desc = jsclass.getOwnProperty(dynamicObject, key);
1193+
if ((enumerableOnly && (desc == null || !desc.getEnumerable())) || (configurableOnly && (desc == null || !desc.getConfigurable())) ||
1194+
(writableOnly && (desc == null || !desc.getWritable()))) {
1195+
continue;
1196+
}
11861197
}
11871198
keys.add(keyToStore);
11881199
}

0 commit comments

Comments
 (0)