anchor.diff:          return const ProceedStatus();
         }
       } else {
  -      return new ReturnStatus(exprEvaluator.createErrorConstant(
  +      return new AbortStatus(exprEvaluator.createErrorConstant(
             node.condition,
             templateConstEvalInvalidType.withArguments(
                 condition,
  
positive.code:   @override
    ExecutionStatus visitVariableDeclaration(VariableDeclaration node) {
      Constant value = evaluate(node.initializer);
      if (value is AbortConstant) return new ReturnStatus(value);
      exprEvaluator.env.addVariableValue(node, value);
      return const ProceedStatus();
    }
  
negative.code:   ReturnStatus(this.value);
  }
  
  /// Status with an exception or error that the statement has thrown.
  class AbortStatus extends ExecutionStatus {
    final AbortConstant error;
    AbortStatus(this.error);
  }
  
  /// An intermediate result that is used within the [ConstantEvaluator].
  class IntermediateValue implements Constant {
    dynamic value;
  