Skip to content

Commit 518f26b

Browse files
committed
[GR-21563] JS nodes are repeatedly materialized.
PullRequest: js/1392
2 parents 2b48e01 + a0cb02b commit 518f26b

File tree

205 files changed

+1840
-626
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

205 files changed

+1840
-626
lines changed

graal-js/src/com.oracle.truffle.js.test.instrumentation/src/com/oracle/truffle/js/test/instrumentation/ElementsAccessTest.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2018, 2020, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* The Universal Permissive License (UPL), Version 1.0
@@ -45,10 +45,10 @@
4545

4646
import org.junit.Test;
4747

48-
import com.oracle.truffle.js.nodes.instrumentation.JSTags.ReadElementTag;
49-
import com.oracle.truffle.js.nodes.instrumentation.JSTags.WriteElementTag;
5048
import com.oracle.truffle.js.nodes.instrumentation.JSTags.LiteralTag;
49+
import com.oracle.truffle.js.nodes.instrumentation.JSTags.ReadElementTag;
5150
import com.oracle.truffle.js.nodes.instrumentation.JSTags.ReadPropertyTag;
51+
import com.oracle.truffle.js.nodes.instrumentation.JSTags.WriteElementTag;
5252
import com.oracle.truffle.js.runtime.builtins.JSArray;
5353
import com.oracle.truffle.js.runtime.builtins.JSFunction;
5454
import com.oracle.truffle.js.runtime.objects.Undefined;
@@ -209,7 +209,7 @@ public void nestedInvokeReads() {
209209
"}", ReadElementTag.class);
210210

211211
for (int i = 0; i < 3; i++) {
212-
// First to reads are to retrieve the invoke "target"
212+
// First two reads are to retrieve the invoke "target"
213213
enter(ReadElementTag.class, (e, elem) -> {
214214
enter(ReadElementTag.class, (e1, elem1) -> {
215215
elem1.input(assertJSArrayInput);

graal-js/src/com.oracle.truffle.js.test.instrumentation/src/com/oracle/truffle/js/test/instrumentation/FineGrainedAccessTest.java

Lines changed: 33 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555

5656
import org.graalvm.polyglot.Context;
5757
import org.graalvm.polyglot.PolyglotAccess;
58+
import org.graalvm.polyglot.Source;
5859
import org.junit.After;
5960
import org.junit.Before;
6061

@@ -368,21 +369,45 @@ public static Object getAttributeFrom(EventContext cx, String name) {
368369
}
369370
}
370371

371-
protected void evalWithTag(String src, Class<? extends Tag> tag) {
372-
evalWithTags(src, new Class[]{tag});
372+
protected Source evalWithTag(String src, Class<? extends Tag> tag) {
373+
return evalWithTags(src, new Class[]{tag});
373374
}
374375

375-
protected void evalAllTags(String src) {
376-
evalWithTags(src, JSTags.ALL);
376+
protected Source evalAllTags(String src) {
377+
return evalWithTags(src, JSTags.ALL);
377378
}
378379

379-
protected void evalWithTags(String src, Class<?>[] filterTags) {
380-
evalWithTags(src, filterTags, new Class[]{StandardTags.ExpressionTag.class, JSTags.InputNodeTag.class});
380+
protected Source evalWithTags(String src, Class<?>[] filterTags) {
381+
return evalWithTags(src, filterTags, new Class[]{StandardTags.ExpressionTag.class, JSTags.InputNodeTag.class});
381382
}
382383

383-
protected void evalWithTags(String src, Class<?>[] sourceSectionTags, Class<?>[] inputGeneratingTags) {
384+
protected Source eval(String src) {
385+
Source source = Source.create("js", src);
386+
context.eval(source);
387+
return source;
388+
}
389+
390+
protected Source evalWithTags(String src, Class<?>[] sourceSectionTags, Class<?>[] inputGeneratingTags) {
391+
binding = initAgent(sourceSectionTags, inputGeneratingTags);
392+
Source source = Source.create("js", src);
393+
evalWithCurrentBinding(source);
394+
return source;
395+
}
396+
397+
protected Source evalWithCurrentBinding(Source source) {
398+
context.eval(source);
399+
return source;
400+
}
401+
402+
protected Source evalWithTags(Source source, Class<?>[] sourceSectionTags, Class<?>[] inputGeneratingTags) {
384403
binding = initAgent(sourceSectionTags, inputGeneratingTags);
385-
context.eval("js", src);
404+
context.eval(source);
405+
return source;
406+
}
407+
408+
protected Source evalWithNewTags(Source source, Class<?>[] sourceSectionTags, Class<?>[] inputGeneratingTags) {
409+
binding.dispose();
410+
return evalWithTags(source, sourceSectionTags, inputGeneratingTags);
386411
}
387412

388413
protected void declareInteropSymbol(String name, ForeignTestObject foreignObject) {

graal-js/src/com.oracle.truffle.js.test.instrumentation/src/com/oracle/truffle/js/test/instrumentation/IfStatementTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2018, 2020, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* The Universal Permissive License (UPL), Version 1.0
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
/*
2+
* Copyright (c) 2020, 2020, Oracle and/or its affiliates. All rights reserved.
3+
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4+
*
5+
* The Universal Permissive License (UPL), Version 1.0
6+
*
7+
* Subject to the condition set forth below, permission is hereby granted to any
8+
* person obtaining a copy of this software, associated documentation and/or
9+
* data (collectively the "Software"), free of charge and under any and all
10+
* copyright rights in the Software, and any and all patent rights owned or
11+
* freely licensable by each licensor hereunder covering either (i) the
12+
* unmodified Software as contributed to or provided by such licensor, or (ii)
13+
* the Larger Works (as defined below), to deal in both
14+
*
15+
* (a) the Software, and
16+
*
17+
* (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if
18+
* one is included with the Software each a "Larger Work" to which the Software
19+
* is contributed by such licensors),
20+
*
21+
* without restriction, including without limitation the rights to copy, create
22+
* derivative works of, display, perform, and distribute the Software and make,
23+
* use, sell, offer for sale, import, export, have made, and have sold the
24+
* Software and the Larger Work(s), and to sublicense the foregoing rights on
25+
* either these or other terms.
26+
*
27+
* This license is subject to the following condition:
28+
*
29+
* The above copyright notice and either this complete permission notice or at a
30+
* minimum a reference to the UPL must be included in all copies or substantial
31+
* portions of the Software.
32+
*
33+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
34+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
35+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
36+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
37+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
38+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
39+
* SOFTWARE.
40+
*/
41+
package com.oracle.truffle.js.test.instrumentation;
42+
43+
import static org.junit.Assert.assertEquals;
44+
import static org.junit.Assert.assertSame;
45+
46+
import java.util.ArrayList;
47+
import java.util.Arrays;
48+
import java.util.HashSet;
49+
import java.util.List;
50+
import java.util.Set;
51+
52+
import com.oracle.truffle.api.frame.VirtualFrame;
53+
import com.oracle.truffle.api.instrumentation.EventContext;
54+
import com.oracle.truffle.api.instrumentation.ExecutionEventListener;
55+
import com.oracle.truffle.api.nodes.Node;
56+
57+
public class InstrumentedNodesExecutionEventListener implements ExecutionEventListener {
58+
List<Node> enteredNodes = new ArrayList<>();
59+
List<Node> exitedNodes = new ArrayList<>();
60+
List<Node> exceptionNodes = new ArrayList<>();
61+
62+
private final Set<Class<?>> classFilter;
63+
64+
public InstrumentedNodesExecutionEventListener(Class<?>... classFilter) {
65+
this.classFilter = new HashSet<>(Arrays.asList(classFilter));
66+
}
67+
68+
private boolean filter(Node node) {
69+
return classFilter.isEmpty() || classFilter.stream().anyMatch(clazz -> clazz.isAssignableFrom(node.getClass()));
70+
}
71+
72+
@Override
73+
public void onEnter(EventContext context, VirtualFrame frame) {
74+
if (filter(context.getInstrumentedNode())) {
75+
enteredNodes.add(context.getInstrumentedNode());
76+
}
77+
}
78+
79+
@Override
80+
public void onReturnValue(EventContext context, VirtualFrame frame, Object result) {
81+
if (filter(context.getInstrumentedNode())) {
82+
exitedNodes.add(context.getInstrumentedNode());
83+
}
84+
}
85+
86+
@Override
87+
public void onReturnExceptional(EventContext context, VirtualFrame frame, Throwable exception) {
88+
if (filter(context.getInstrumentedNode())) {
89+
exceptionNodes.add(context.getInstrumentedNode());
90+
}
91+
}
92+
93+
public void checkEnteredNodes(List<? extends Node> expected) {
94+
checkNodes(expected, enteredNodes);
95+
}
96+
97+
public void checkExitedNodes(List<? extends Node> expected) {
98+
checkNodes(expected, enteredNodes);
99+
}
100+
101+
private static void checkNodes(List<? extends Node> expected, List<? extends Node> actual) {
102+
assertEquals(expected.size(), actual.size());
103+
for (int i = 0; i < expected.size(); i++) {
104+
assertSame(expected.get(i), actual.get(i));
105+
}
106+
}
107+
}

0 commit comments

Comments
 (0)