Skip to content

Commit fd4b7be

Browse files
iamstoliswoess
authored andcommitted
Adding an option that enables/disables stack-trace-related extensions.
(cherry picked from commit 23bfc0d)
1 parent 5041fbf commit fd4b7be

File tree

6 files changed

+19
-12
lines changed

6 files changed

+19
-12
lines changed

graal-js/src/com.oracle.truffle.js/src/com/oracle/truffle/js/nodes/access/ErrorStackTraceLimitNode.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ protected final int doInt(
7070
@Cached IsNumberNode isNumber,
7171
@Cached JSToIntegerAsLongNode toInteger) {
7272
JSContext context = getJSContext();
73-
if (context.isOptionV8CompatibilityMode() || context.getLanguageOptions().isMLEMode()) {
73+
if (context.getLanguageOptions().stackTraceAPI()) {
7474
JSFunctionObject errorConstructor = getRealm().getErrorConstructor(JSErrorType.Error);
7575
if (JSProperty.isData(getStackTraceLimit.getPropertyFlagsOrDefault(errorConstructor, JSError.STACK_TRACE_LIMIT_PROPERTY_NAME, JSProperty.ACCESSOR))) {
7676
Object value = getStackTraceLimit.getOrDefault(errorConstructor, JSError.STACK_TRACE_LIMIT_PROPERTY_NAME, Undefined.instance);

graal-js/src/com.oracle.truffle.js/src/com/oracle/truffle/js/runtime/JSContextOptions.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -589,6 +589,11 @@ public Map<String, String> apply(String value) {
589589
public static final OptionKey<Boolean> V8_INTRINSICS = new OptionKey<>(false);
590590
@CompilationFinal private boolean v8Intrinsics;
591591

592+
public static final String STACK_TRACE_API_NAME = JS_OPTION_PREFIX + "stack-trace-api";
593+
@Option(name = STACK_TRACE_API_NAME, category = OptionCategory.EXPERT, help = "Enable Stack Trace API (Error.captureStackTrace/prepareStackTrace/stackTraceLimit).") //
594+
public static final OptionKey<Boolean> STACK_TRACE_API = new OptionKey<>(true);
595+
@CompilationFinal private boolean stackTraceAPI;
596+
592597
public enum UnhandledRejectionsTrackingMode {
593598
NONE,
594599
WARN,
@@ -792,6 +797,7 @@ private void cacheOptions(SandboxPolicy sandboxPolicy) {
792797
this.scopeOptimization = readBooleanOption(SCOPE_OPTIMIZATION);
793798
this.allowNarrowSpacesInDateFormat = ALLOW_NARROW_SPACES_IN_DATE_FORMAT.hasBeenSet(optionValues) ? readBooleanOption(ALLOW_NARROW_SPACES_IN_DATE_FORMAT) : !isV8CompatibilityMode();
794799
this.v8Intrinsics = readBooleanOption(V8_INTRINSICS);
800+
this.stackTraceAPI = readBooleanOption(STACK_TRACE_API);
795801
}
796802

797803
private UnhandledRejectionsTrackingMode readUnhandledRejectionsMode() {
@@ -1257,6 +1263,10 @@ public boolean isV8Intrinsics() {
12571263
return v8Intrinsics;
12581264
}
12591265

1266+
public boolean isStackTraceAPI() {
1267+
return stackTraceAPI;
1268+
}
1269+
12601270
public short getFrequencyBasedPropertyCacheLimit() {
12611271
return frequencyBasedPropertyCacheLimit;
12621272
}

graal-js/src/com.oracle.truffle.js/src/com/oracle/truffle/js/runtime/JSException.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ public static JSException create(JSErrorType type, String message, Throwable cau
151151

152152
public static int getStackTraceLimit(JSRealm realm) {
153153
JSContextOptions contextOptions = realm.getContextOptions();
154-
if (contextOptions.isV8CompatibilityMode() || contextOptions.isMLEMode()) {
154+
if (contextOptions.isStackTraceAPI()) {
155155
JSFunctionObject errorConstructor = realm.getErrorConstructor(JSErrorType.Error);
156156
DynamicObjectLibrary lib = DynamicObjectLibrary.getUncached();
157157
if (JSProperty.isData(lib.getPropertyFlagsOrDefault(errorConstructor, JSError.STACK_TRACE_LIMIT_PROPERTY_NAME, JSProperty.ACCESSOR))) {

graal-js/src/com.oracle.truffle.js/src/com/oracle/truffle/js/runtime/JSLanguageOptions.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@ public record JSLanguageOptions(
127127
boolean functionStatementError,
128128
boolean constAsVar,
129129
boolean profileTime,
130+
boolean stackTraceAPI,
130131
String locale) {
131132

132133
public static JSLanguageOptions fromOptionValues(SandboxPolicy sandboxPolicy, OptionValues optionValues) {
@@ -207,6 +208,7 @@ public static JSLanguageOptions fromContextOptions(JSContextOptions options) {
207208
boolean functionStatementError = options.isFunctionStatementError();
208209
boolean constAsVar = options.isConstAsVar();
209210
boolean profileTime = options.isProfileTime();
211+
boolean stackTraceAPI = options.isStackTraceAPI();
210212
String locale = options.getLocale();
211213

212214
return new JSLanguageOptions(
@@ -282,6 +284,7 @@ public static JSLanguageOptions fromContextOptions(JSContextOptions options) {
282284
functionStatementError,
283285
constAsVar,
284286
profileTime,
287+
stackTraceAPI,
285288
locale);
286289
}
287290

graal-js/src/com.oracle.truffle.js/src/com/oracle/truffle/js/runtime/JSRealm.java

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2243,7 +2243,6 @@ public void addOptionalGlobals() {
22432243
setupJavaInterop();
22442244
}
22452245
addCommonJSGlobals();
2246-
addErrorStackTraceLimit();
22472246
}
22482247

22492248
private void addGlobalGlobal() {
@@ -2252,13 +2251,6 @@ private void addGlobalGlobal() {
22522251
}
22532252
}
22542253

2255-
private void addErrorStackTraceLimit() {
2256-
if (getContextOptions().isV8CompatibilityMode() || getContextOptions().isMLEMode()) {
2257-
JSObject errorConstructor = getErrorConstructor(JSErrorType.Error);
2258-
JSObjectUtil.putDataProperty(errorConstructor, JSError.STACK_TRACE_LIMIT_PROPERTY_NAME, getContextOptions().getStackTraceLimit(), JSAttributes.getDefault());
2259-
}
2260-
}
2261-
22622254
private void addShellGlobals() {
22632255
if (getContextOptions().isShell()) {
22642256
GlobalBuiltins.GLOBAL_SHELL.forEachBuiltin((Builtin builtin) -> {

graal-js/src/com.oracle.truffle.js/src/com/oracle/truffle/js/runtime/builtins/JSError.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@
5454
import com.oracle.truffle.js.runtime.GraalJSException;
5555
import com.oracle.truffle.js.runtime.GraalJSException.JSStackTraceElement;
5656
import com.oracle.truffle.js.runtime.JSContext;
57+
import com.oracle.truffle.js.runtime.JSContextOptions;
5758
import com.oracle.truffle.js.runtime.JSErrorType;
5859
import com.oracle.truffle.js.runtime.JSException;
5960
import com.oracle.truffle.js.runtime.JSRealm;
@@ -209,8 +210,9 @@ public static JSConstructor createErrorConstructor(JSRealm realm, JSErrorType er
209210
JSObjectUtil.putConstructorProperty(classPrototype, errorConstructor);
210211
JSObjectUtil.putDataProperty(classPrototype, NAME, name, MESSAGE_ATTRIBUTES);
211212
JSObjectUtil.putConstructorPrototypeProperty(errorConstructor, classPrototype);
212-
if (errorType == JSErrorType.Error) {
213+
if (realm.getContextOptions().isStackTraceAPI() && errorType == JSErrorType.Error) {
213214
JSObjectUtil.putFunctionsFromContainer(realm, errorConstructor, ErrorFunctionBuiltins.BUILTINS);
215+
JSObjectUtil.putDataProperty(errorConstructor, STACK_TRACE_LIMIT_PROPERTY_NAME, JSContextOptions.STACK_TRACE_LIMIT.getValue(realm.getOptions()), JSAttributes.getDefault());
214216
}
215217

216218
return new JSConstructor(errorConstructor, classPrototype);
@@ -313,7 +315,7 @@ public static Object prepareStack(JSRealm realm, JSDynamicObject errorObj, Graal
313315
*/
314316
@TruffleBoundary
315317
public static Object prepareStackNoCallback(JSRealm realm, JSDynamicObject errorObj, JSStackTraceElement[] jsStackTrace) {
316-
if (realm.getContextOptions().isV8CompatibilityMode()) {
318+
if (realm.getContextOptions().isStackTraceAPI()) {
317319
JSFunctionObject error = realm.getErrorConstructor(JSErrorType.Error);
318320
Object prepareStackTrace = JSObject.get(error, PREPARE_STACK_TRACE_NAME);
319321
if (JSFunction.isJSFunction(prepareStackTrace)) {

0 commit comments

Comments
 (0)