visitAssertStatement method
Visit a SAssertStatement.
Implementation
@override
Object? visitAssertStatement(SAssertStatement node) {
// Assertions are always enabled in this interpreter for now.
final conditionValue = node.condition!.accept<Object?>(this);
final bridgedInstance = toBridgedInstance(conditionValue);
bool conditionResult;
if (conditionValue is bool) {
conditionResult = conditionValue;
} else if (bridgedInstance.$2 && bridgedInstance.$1?.nativeObject is bool) {
conditionResult = bridgedInstance.$1!.nativeObject as bool;
} else {
throw RuntimeD4rtException(
"Assertion condition must be a boolean, but was ${conditionValue?.runtimeType}.",
);
}
if (!conditionResult) {
// Condition is false, evaluate the message and throw.
String assertionMessage = "Assertion failed";
if (node.message != null) {
final messageValue = node.message!.accept<Object?>(this);
assertionMessage = "Assertion failed: ${stringify(messageValue)}";
}
// Mimic Dart's AssertionError by throwing a RuntimeError.
throw RuntimeD4rtException(assertionMessage);
}
return null; // Assert statements don't produce a value.
}