41
41
package com .oracle .truffle .js .builtins ;
42
42
43
43
import java .util .EnumSet ;
44
+ import java .util .Objects ;
44
45
import java .util .concurrent .atomic .AtomicReference ;
45
46
46
47
import com .oracle .truffle .api .Assumption ;
@@ -2139,7 +2140,7 @@ protected final JSFunctionObject doCached(String paramList, String body, String
2139
2140
@ Specialization (replaces = "doCached" )
2140
2141
protected final JSFunctionObject doUncached (String paramList , String body , String sourceName , ScriptOrModule activeScriptOrModule ,
2141
2142
@ Cached ("createCache()" ) LRUCache <CachedSourceKey , ScriptNode > cache ) {
2142
- ScriptNode cached = cacheLookup (cache , new CachedSourceKey ( paramList , body , sourceName , activeScriptOrModule ) );
2143
+ ScriptNode cached = cacheLookup (cache , paramList , body , sourceName , activeScriptOrModule );
2143
2144
JSRealm realm = getRealm ();
2144
2145
if (cached == null ) {
2145
2146
return parseAndEvalFunction (cache , realm , paramList , body , sourceName , activeScriptOrModule );
@@ -2149,9 +2150,9 @@ protected final JSFunctionObject doUncached(String paramList, String body, Strin
2149
2150
}
2150
2151
2151
2152
@ TruffleBoundary
2152
- protected ScriptNode cacheLookup (LRUCache <CachedSourceKey , ScriptNode > cache , CachedSourceKey sourceKey ) {
2153
+ protected ScriptNode cacheLookup (LRUCache <CachedSourceKey , ScriptNode > cache , String paramList , String body , String sourceName , ScriptOrModule activeScriptOrModule ) {
2153
2154
synchronized (cache ) {
2154
- return cache .get (sourceKey );
2155
+ return cache .get (new CachedSourceKey ( paramList , body , sourceName , activeScriptOrModule ) );
2155
2156
}
2156
2157
}
2157
2158
@@ -2180,7 +2181,48 @@ AssumedValue<ScriptNode> createAssumedValue() {
2180
2181
return new AssumedValue <>("parsedFunction" , null );
2181
2182
}
2182
2183
2183
- protected record CachedSourceKey (String paramList , String body , String sourceName , ScriptOrModule activeScriptOrModule ) {
2184
+ protected static final class CachedSourceKey {
2185
+ private final String paramList ;
2186
+ private final String body ;
2187
+ private final String sourceName ;
2188
+ private final ScriptOrModule activeScriptOrModule ;
2189
+
2190
+ protected CachedSourceKey (String paramList , String body , String sourceName , ScriptOrModule activeScriptOrModule ) {
2191
+ this .paramList = paramList ;
2192
+ this .body = body ;
2193
+ this .sourceName = sourceName ;
2194
+ this .activeScriptOrModule = activeScriptOrModule ;
2195
+ }
2196
+
2197
+ public String paramList () {
2198
+ return paramList ;
2199
+ }
2200
+
2201
+ public String body () {
2202
+ return body ;
2203
+ }
2204
+
2205
+ public String sourceName () {
2206
+ return sourceName ;
2207
+ }
2208
+
2209
+ public ScriptOrModule activeScriptOrModule () {
2210
+ return activeScriptOrModule ;
2211
+ }
2212
+
2213
+ @ Override
2214
+ public boolean equals (Object obj ) {
2215
+ return this == obj || (obj instanceof CachedSourceKey that &&
2216
+ Objects .equals (this .paramList , that .paramList ) &&
2217
+ Objects .equals (this .body , that .body ) &&
2218
+ Objects .equals (this .sourceName , that .sourceName ) &&
2219
+ Objects .equals (this .activeScriptOrModule , that .activeScriptOrModule ));
2220
+ }
2221
+
2222
+ @ Override
2223
+ public int hashCode () {
2224
+ return Objects .hash (paramList , body , sourceName , activeScriptOrModule );
2225
+ }
2184
2226
}
2185
2227
}
2186
2228
0 commit comments