/**
* Copyright (c) 2012-2016 André Bargull
* Alle Rechte vorbehalten / All Rights Reserved. Use is subject to license terms.
*
* <https://github.com/anba/es6draft>
*/
package com.github.anba.es6draft.runtime.internal;
import java.util.Objects;
import com.github.anba.es6draft.runtime.AbstractOperations;
import com.github.anba.es6draft.runtime.ExecutionContext;
import com.github.anba.es6draft.runtime.objects.ErrorObject;
import com.github.anba.es6draft.runtime.types.ScriptObject;
/**
*
*/
@SuppressWarnings("serial")
public final class UnhandledRejectionException extends RuntimeException {
private final Object value;
/**
* Creates a new {@link UnhandledRejectionException} instance.
*
* @param value
* the wrapped exception value
*/
public UnhandledRejectionException(Object value) {
this.value = value;
}
public Throwable getCauseIfPresent() {
if (value instanceof ErrorObject) {
return ((ErrorObject) value).getException();
}
return this;
}
@Override
public String getMessage() {
return Objects.toString(value);
}
/**
* Returns the message string of this exception.
*
* @param cx
* the execution context
* @return the exception error message
*/
public String getMessage(ExecutionContext cx) {
try {
return AbstractOperations.ToFlatString(cx, value);
} catch (ScriptException t) {
if (value instanceof ScriptObject) {
return cx.getRealm().message(Messages.Key.ToStringFailed);
}
return Objects.toString(value);
}
}
}