Version 2.13.0-43.0.dev
Merge commit '9474c2355d9eff50f759b45b2533e989dade778e' into 'dev'
diff --git a/pkg/analyzer/lib/src/generated/error_verifier.dart b/pkg/analyzer/lib/src/generated/error_verifier.dart
index 511bacd..1971848 100644
--- a/pkg/analyzer/lib/src/generated/error_verifier.dart
+++ b/pkg/analyzer/lib/src/generated/error_verifier.dart
@@ -931,8 +931,13 @@
_checkForWrongNumberOfParametersForSetter(node.name, node.parameters);
_checkForNonVoidReturnTypeForSetter(returnType);
} else if (node.isOperator) {
- _checkForOptionalParameterInOperator(node);
- _checkForWrongNumberOfParametersForOperator(node);
+ var hasWrongNumberOfParameters =
+ _checkForWrongNumberOfParametersForOperator(node);
+ if (!hasWrongNumberOfParameters) {
+ // If the operator has too many parameters including one or more
+ // optional parameters, only report one error.
+ _checkForOptionalParameterInOperator(node);
+ }
_checkForNonVoidReturnTypeForOperator(node);
}
_checkForExtensionDeclaresMemberOfObject(node);
@@ -4593,12 +4598,12 @@
/// operator declaration before being called.
///
/// See [CompileTimeErrorCode.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR].
- void _checkForWrongNumberOfParametersForOperator(
+ bool _checkForWrongNumberOfParametersForOperator(
MethodDeclaration declaration) {
// prepare number of parameters
var parameterList = declaration.parameters;
if (parameterList == null) {
- return;
+ return false;
}
int numParameters = parameterList.parameters.length;
// prepare operator name
@@ -4634,12 +4639,15 @@
CompileTimeErrorCode.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR,
nameNode,
[name, expected, numParameters]);
+ return true;
} else if ("-" == name && numParameters > 1) {
_errorReporter.reportErrorForNode(
CompileTimeErrorCode.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR_MINUS,
nameNode,
[numParameters]);
+ return true;
}
+ return false;
}
/// Verify that the given setter [parameterList] has only one required
diff --git a/runtime/vm/BUILD.gn b/runtime/vm/BUILD.gn
index 93534de..49c4036 100644
--- a/runtime/vm/BUILD.gn
+++ b/runtime/vm/BUILD.gn
@@ -74,7 +74,7 @@
if (is_fuchsia) {
if (using_fuchsia_gn_sdk) {
extra_deps = [
- "$fuchsia_sdk_root/fidl/fuchsia.deprecatedtimezone",
+ "$fuchsia_sdk_root/fidl/fuchsia.intl",
"$fuchsia_sdk_root/pkg/async",
"$fuchsia_sdk_root/pkg/async-default",
"$fuchsia_sdk_root/pkg/async-loop",
@@ -87,7 +87,7 @@
]
} else if (using_fuchsia_sdk) {
extra_deps = [
- "$fuchsia_sdk_root/fidl:fuchsia.deprecatedtimezone",
+ "$fuchsia_sdk_root/fidl:fuchsia.intl",
"$fuchsia_sdk_root/pkg:async-loop",
"$fuchsia_sdk_root/pkg:async-loop-default",
"$fuchsia_sdk_root/pkg:inspect",
@@ -98,9 +98,7 @@
]
} else {
extra_deps = [
- # TODO(US-399): Remove time_service specific code when it is no longer
- # necessary.
- "//sdk/fidl/fuchsia.deprecatedtimezone",
+ "//sdk/fidl/fuchsia.intl",
"//sdk/lib/sys/cpp",
"//sdk/lib/sys/inspect/cpp",
"//zircon/public/lib/fbl",
diff --git a/runtime/vm/os_fuchsia.cc b/runtime/vm/os_fuchsia.cc
index e79827b..a9bee8e 100644
--- a/runtime/vm/os_fuchsia.cc
+++ b/runtime/vm/os_fuchsia.cc
@@ -10,8 +10,10 @@
#include <errno.h>
#include <fcntl.h>
#include <stdint.h>
+#include <string.h>
+#include <unistd.h>
-#include <fuchsia/deprecatedtimezone/cpp/fidl.h>
+#include <fuchsia/intl/cpp/fidl.h>
#include <lib/async-loop/default.h>
#include <lib/async-loop/loop.h>
#include <lib/async/default.h>
@@ -22,21 +24,49 @@
#include <zircon/process.h>
#include <zircon/syscalls.h>
#include <zircon/syscalls/object.h>
-#include <zircon/time.h>
#include <zircon/threads.h>
+#include <zircon/time.h>
#include <zircon/types.h>
+#include <set>
+
+#include "unicode/errorcode.h"
+#include "unicode/timezone.h"
+#include "unicode/umachine.h"
+
#include "platform/assert.h"
+#include "platform/syslog.h"
#include "platform/utils.h"
+#include "vm/lockers.h"
+#include "vm/os_thread.h"
#include "vm/zone.h"
namespace {
+using dart::Mutex;
+using dart::MutexLocker;
+using dart::Syslog;
+using dart::Zone;
+
+// This is the default timezone returned if it could not be obtained. For
+// Fuchsia, the default device timezone is always UTC.
+static const char kDefaultTimezone[] = "UTC";
+
+static constexpr int32_t kMsPerSec = 1000;
+
// The data directory containing ICU timezone data files.
static constexpr char kICUTZDataDir[] = "/config/data/tzdata/icu/44/le";
+// This is the general OK status.
+static constexpr int32_t kOk = 0;
+
+// This status means that the error code is not initialized yet ("set" was not
+// yet called). Error codes are usually either 0 (kOk), or negative.
+static constexpr int32_t kUninitialized = 1;
+
// The status codes for tzdata file open and read.
enum class TZDataStatus {
+ // The operation completed without error.
OK = 0,
// The open call for the tzdata file did not succeed.
COULD_NOT_OPEN = -1,
@@ -46,6 +76,8 @@
// Adds a facility for introspecting timezone data errors. Allows insight into
// the internal state of the VM even if error reporting facilities fail.
+//
+// Under normal operation, all metric values below should be zero.
class InspectMetrics {
public:
// Does not take ownership of inspector.
@@ -53,9 +85,27 @@
: inspector_(inspector),
root_(inspector_->GetRoot()),
metrics_(root_.CreateChild("os")),
- dst_status_(metrics_.CreateInt("dst_status", 0)),
- tz_data_status_(metrics_.CreateInt("tz_data_status", 0)),
- tz_data_close_status_(metrics_.CreateInt("tz_data_close_status", 0)) {}
+ dst_status_(metrics_.CreateInt("dst_status", kUninitialized)),
+ tz_data_status_(metrics_.CreateInt("tz_data_status", kUninitialized)),
+ tz_data_close_status_(
+ metrics_.CreateInt("tz_data_close_status", kUninitialized)),
+ get_profile_status_(
+ metrics_.CreateInt("get_profile_status", kUninitialized)),
+ profiles_timezone_content_status_(
+ metrics_.CreateInt("timezone_content_status", kOk)),
+ num_get_profile_calls_(metrics_.CreateInt("num_get_profile_calls", 0)),
+ num_on_change_calls_(metrics_.CreateInt("num_on_change_calls", 0)),
+ num_intl_provider_errors_(
+ metrics_.CreateInt("num_intl_provider_errors", 0)) {}
+
+ // Registers a single call to GetProfile callback.
+ void RegisterGetProfileCall() { num_get_profile_calls_.Add(1); }
+
+ // Registers a single call to OnChange callback.
+ void RegisterOnChangeCall() { num_on_change_calls_.Add(1); }
+
+ // Registers a provider error.
+ void RegisterIntlProviderError() { num_intl_provider_errors_.Add(1); }
// Sets the last status code for DST offset calls.
void SetDSTOffsetStatus(zx_status_t status) {
@@ -69,6 +119,17 @@
tz_data_close_status_.Set(status);
}
+ // Sets the last status code for the call to PropertyProvider::GetProfile.
+ void SetProfileStatus(zx_status_t status) {
+ get_profile_status_.Set(static_cast<int32_t>(status));
+ }
+
+ // Sets the last status seen while examining timezones returned from
+ // PropertyProvider::GetProfile.
+ void SetTimeZoneContentStatus(zx_status_t status) {
+ profiles_timezone_content_status_.Set(static_cast<int32_t>(status));
+ }
+
private:
// The inspector that all metrics are being reported into.
inspect::Inspector* inspector_;
@@ -87,11 +148,165 @@
// The return code for the close() call for tzdata files.
inspect::IntProperty tz_data_close_status_;
+
+ // The return code of the GetProfile call in GetTimeZoneName. If this is
+ // nonzero, then os_fuchsia.cc reported a default timezone as a fallback.
+ inspect::IntProperty get_profile_status_;
+
+ // U_ILLEGAL_ARGUMENT_ERROR(=1) if timezones read from ProfileProvider were
+ // incorrect. Otherwise 0. If this metric reports U_ILLEGAL_ARGUMENT_ERROR,
+ // the os_fuchsia.cc module reported a default timezone as a fallback.
+ inspect::IntProperty profiles_timezone_content_status_;
+
+ // Keeps a number of get_profile update calls.
+ inspect::IntProperty num_get_profile_calls_;
+
+ // Number of "on change" callback calls.
+ inspect::IntProperty num_on_change_calls_;
+
+ // Keeps a number of errors encountered in intl provider.
+ inspect::IntProperty num_intl_provider_errors_;
};
+// Thread-safe storage for the current timezone name.
+//
+// Keeps an up to date timezone cache, updating if needed through the
+// asynchronous update interface. Access to this class is thread-safe.
+class TimezoneName final {
+ public:
+ // Creates a new instance of TimezoneName. Does not take ownership of
+ // metrics.
+ static std::shared_ptr<TimezoneName> New(
+ fuchsia::intl::PropertyProviderPtr proxy,
+ std::weak_ptr<InspectMetrics> metrics) {
+ auto timezone_name =
+ std::make_shared<TimezoneName>(std::move(proxy), metrics);
+ timezone_name->InitHandlers(timezone_name);
+ return timezone_name;
+ }
+
+ TimezoneName(fuchsia::intl::PropertyProviderPtr proxy,
+ std::weak_ptr<InspectMetrics> metrics)
+ : m_(),
+ metrics_(std::move(metrics)),
+ proxy_(std::move(proxy)),
+ timezone_name_(kDefaultTimezone) {
+ ASSERT(metrics_.lock() != nullptr);
+ }
+
+ // Gets the current timezone name. Repeated calls may retrieve updated
+ // values.
+ std::string Get() const {
+ MutexLocker lock(&m_);
+ // Returns a copy, to avoid a data race with async updates.
+ return timezone_name_;
+ }
+
+ private:
+ // Sets the event handlers in this resolver. Intended to resolve a circular
+ // reference between the shared timezone name and this.
+ void InitHandlers(std::shared_ptr<TimezoneName> timezone_name) {
+ ASSERT(timezone_name.get() == this);
+ timezone_name->proxy_.set_error_handler(
+ [weak_this = std::weak_ptr(timezone_name)](zx_status_t status) {
+ if (!weak_this.expired()) {
+ weak_this.lock()->ErrorHandler(status);
+ }
+ });
+ timezone_name->proxy_.events().OnChange =
+ [weak_this = std::weak_ptr(timezone_name)]() {
+ if (!weak_this.expired()) {
+ weak_this.lock()->OnChangeCallback();
+ }
+ };
+ timezone_name->proxy_->GetProfile(
+ [weak_this =
+ std::weak_ptr(timezone_name)](fuchsia::intl::Profile profile) {
+ if (!weak_this.expired()) {
+ weak_this.lock()->GetProfileCallback(std::move(profile));
+ }
+ });
+ }
+
+ // Called on a profile provider error in the context of the event loop
+ // thread.
+ void ErrorHandler(zx_status_t status) {
+ MutexLocker lock(&m_);
+ WithMetrics([status](std::shared_ptr<InspectMetrics> metrics) {
+ metrics->SetProfileStatus(status);
+ metrics->RegisterIntlProviderError();
+ });
+ }
+
+ // Called when an OnChange event is received in the context of the event loop
+ // thread. The only action here is to trigger an asynchronous update of the
+ // intl profile.
+ void OnChangeCallback() {
+ MutexLocker lock(&m_);
+ WithMetrics([](std::shared_ptr<InspectMetrics> metrics) {
+ metrics->RegisterOnChangeCall();
+ });
+ proxy_->GetProfile([this](fuchsia::intl::Profile profile) {
+ this->GetProfileCallback(std::move(profile));
+ });
+ }
+
+ // Called when a GetProfile async request is resolved, in the context of the
+ // event loop thread.
+ void GetProfileCallback(fuchsia::intl::Profile profile) {
+ MutexLocker lock(&m_);
+ WithMetrics([](std::shared_ptr<InspectMetrics> metrics) {
+ metrics->RegisterGetProfileCall();
+ });
+ const std::vector<fuchsia::intl::TimeZoneId>& timezones =
+ profile.time_zones();
+ if (timezones.empty()) {
+ WithMetrics([](std::shared_ptr<InspectMetrics> metrics) {
+ metrics->SetTimeZoneContentStatus(U_ILLEGAL_ARGUMENT_ERROR);
+ });
+ // Empty timezone array is not up to fuchsia::intl spec. The serving
+ // endpoint is broken and should be fixed.
+ Syslog::PrintErr("got empty timezone value\n");
+ return;
+ }
+ WithMetrics([](std::shared_ptr<InspectMetrics> metrics) {
+ metrics->SetProfileStatus(ZX_OK);
+ metrics->SetTimeZoneContentStatus(ZX_OK);
+ });
+
+ timezone_name_ = timezones[0].id;
+ }
+
+ // Runs the provided function only on valid metrics.
+ void WithMetrics(std::function<void(std::shared_ptr<InspectMetrics> m)> f) {
+ std::shared_ptr<InspectMetrics> l = metrics_.lock();
+ if (l != nullptr) {
+ f(l);
+ }
+ }
+
+ // Guards timezone_name_ because the callbacks will be called in an
+ // asynchronous thread.
+ mutable Mutex m_;
+
+ // Used to keep tally on the update events. Not owned.
+ std::weak_ptr<InspectMetrics> metrics_;
+
+ // A client-side proxy for a connection to the property provider service.
+ fuchsia::intl::PropertyProviderPtr proxy_;
+
+ // Caches the current timezone name. This is updated asynchronously through
+ // GetProfileCallback.
+ std::string timezone_name_;
+};
+
+// The timezone names encountered so far. The timezone names must live forever.
+std::set<const std::string> timezone_names;
+
// Initialized on OS:Init(), deinitialized on OS::Cleanup.
std::unique_ptr<sys::ComponentInspector> component_inspector;
-std::unique_ptr<InspectMetrics> metrics;
+std::shared_ptr<InspectMetrics> metrics;
+std::shared_ptr<TimezoneName> timezone_name;
async_loop_t* message_loop = nullptr;
// Initializes the source of timezone data if available. Timezone data file in
@@ -153,35 +368,57 @@
// Putting this hack right now due to CP-120 as I need to remove
// component:ConnectToEnvironmentServices and this is the only thing that is
// blocking it and FL-98 will take time.
-static fuchsia::deprecatedtimezone::TimezoneSyncPtr tz;
+static fuchsia::intl::PropertyProviderPtr property_provider;
static zx_status_t GetLocalAndDstOffsetInSeconds(int64_t seconds_since_epoch,
int32_t* local_offset,
int32_t* dst_offset) {
- zx_status_t status = tz->GetTimezoneOffsetMinutes(seconds_since_epoch * 1000,
- local_offset, dst_offset);
- metrics->SetDSTOffsetStatus(status);
- if (status != ZX_OK) {
- return status;
+ const char* timezone_id = OS::GetTimeZoneName(seconds_since_epoch);
+ std::unique_ptr<icu::TimeZone> timezone(
+ icu::TimeZone::createTimeZone(timezone_id));
+ UErrorCode error = U_ZERO_ERROR;
+ const auto ms_since_epoch =
+ static_cast<UDate>(kMsPerSec * seconds_since_epoch);
+ // The units of time that local_offset and dst_offset are returned from this
+ // function is, usefully, not documented, but it seems that the units are
+ // milliseconds. Add these variables here for clarity.
+ int32_t local_offset_ms = 0;
+ int32_t dst_offset_ms = 0;
+ timezone->getOffset(ms_since_epoch, /*local_time=*/0, local_offset_ms,
+ dst_offset_ms, error);
+ metrics->SetDSTOffsetStatus(error);
+ if (error != U_ZERO_ERROR) {
+ icu::ErrorCode icu_error;
+ icu_error.set(error);
+ Syslog::PrintErr("could not get DST offset: %s\n", icu_error.errorName());
+ return ZX_ERR_INTERNAL;
}
- *local_offset *= 60;
- *dst_offset *= 60;
+ // We must return offset in seconds, so convert.
+ *local_offset = local_offset_ms / kMsPerSec;
+ *dst_offset = dst_offset_ms / kMsPerSec;
return ZX_OK;
}
+// Returns a C string with the time zone name. This module retains the
+// ownership of the pointer.
const char* OS::GetTimeZoneName(int64_t seconds_since_epoch) {
- // TODO(abarth): Handle time zone changes.
- static const auto* tz_name = new std::string([] {
- std::string result;
- tz->GetTimezoneId(&result);
- return result;
- }());
- return tz_name->c_str();
+ ASSERT(timezone_name != nullptr);
+
+ // Sadly, since we do not know how long the timezone name will be needed, we
+ // can not ever deallocate it. So instead, we put it into a a set that will
+ // not move it around in memory and return a pointer to it. Since the number
+ // of timezones is finite, this ensures that the memory taken up by timezones
+ // does not grow indefinitely, even if we end up retaining all the timezones
+ // there are.
+ const auto i = timezone_names.insert(timezone_name->Get());
+ ASSERT(i.first != timezone_names.end());
+ return i.first->c_str();
}
int OS::GetTimeZoneOffsetInSeconds(int64_t seconds_since_epoch) {
- int32_t local_offset, dst_offset;
- zx_status_t status = GetLocalAndDstOffsetInSeconds(
+ int32_t local_offset = 0;
+ int32_t dst_offset = 0;
+ const zx_status_t status = GetLocalAndDstOffsetInSeconds(
seconds_since_epoch, &local_offset, &dst_offset);
return status == ZX_OK ? local_offset + dst_offset : 0;
}
@@ -211,7 +448,7 @@
}
int64_t OS::GetCurrentMonotonicMicros() {
- int64_t ticks = GetCurrentMonotonicTicks();
+ const int64_t ticks = GetCurrentMonotonicTicks();
ASSERT(GetCurrentMonotonicFrequency() == kNanosecondsPerSecond);
return ticks / kNanosecondsPerMicrosecond;
}
@@ -231,6 +468,9 @@
return -1;
}
+// The timezone names encountered so far. The timezone names must live forever.
+std::set<const std::string> timezone_names;
+
// TODO(5411554): May need to hoist these architecture dependent code
// into a architecture specific file e.g: os_ia32_fuchsia.cc
intptr_t OS::ActivationFrameAlignment() {
@@ -300,7 +540,7 @@
va_end(measure_args);
char* buffer;
- if (zone) {
+ if (zone != nullptr) {
buffer = zone->Alloc<char>(len + 1);
} else {
buffer = reinterpret_cast<char*>(malloc(len + 1));
@@ -364,19 +604,22 @@
sys::ComponentContext* context = dart::ComponentContext();
component_inspector = std::make_unique<sys::ComponentInspector>(context);
- metrics = std::make_unique<InspectMetrics>(component_inspector->inspector());
+ metrics = std::make_shared<InspectMetrics>(component_inspector->inspector());
InitializeTZData();
- context->svc()->Connect(tz.NewRequest());
+ auto services = sys::ServiceDirectory::CreateFromNamespace();
+ services->Connect(property_provider.NewRequest());
+
+ timezone_name = TimezoneName::New(std::move(property_provider), metrics);
}
void OS::Cleanup() {
if (message_loop != nullptr) {
async_loop_shutdown(message_loop);
}
-
- metrics = nullptr;
- component_inspector = nullptr;
+ timezone_name.reset();
+ metrics.reset();
+ component_inspector.reset();
if (message_loop != nullptr) {
// Check message_loop is still the default dispatcher before clearing it.
diff --git a/tests/language/operator/invalid_operators_test.dart b/tests/language/operator/invalid_operators_test.dart
index 27bac6a..fba4e06 100644
--- a/tests/language/operator/invalid_operators_test.dart
+++ b/tests/language/operator/invalid_operators_test.dart
@@ -243,8 +243,6 @@
// ^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '~' shouldn't have any parameters.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
}
class Operators4 {
@@ -330,8 +328,6 @@
// ^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '~' shouldn't have any parameters.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
}
class Operators5 {
@@ -339,116 +335,78 @@
// ^^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '==' should have exactly one parameter.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
operator <(a, [b]) => true;
// ^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '<' should have exactly one parameter.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
operator >(a, [b]) => true;
// ^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '>' should have exactly one parameter.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
operator <=(a, [b]) => true;
// ^^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '<=' should have exactly one parameter.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
operator >=(a, [b]) => true;
// ^^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '>=' should have exactly one parameter.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
operator -(a, [b]) => true;
// ^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '-' should have zero or one parameter.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
operator +(a, [b]) => true;
// ^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '+' should have exactly one parameter.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
operator /(a, [b]) => true;
// ^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '/' should have exactly one parameter.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
operator ~/(a, [b]) => true;
// ^^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '~/' should have exactly one parameter.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
operator *(a, [b]) => true;
// ^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '*' should have exactly one parameter.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
operator %(a, [b]) => true;
// ^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '%' should have exactly one parameter.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
operator |(a, [b]) => true;
// ^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '|' should have exactly one parameter.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
operator ^(a, [b]) => true;
// ^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '^' should have exactly one parameter.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
operator &(a, [b]) => true;
// ^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '&' should have exactly one parameter.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
operator <<(a, [b]) => true;
// ^^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '<<' should have exactly one parameter.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
operator >>(a, [b]) => true;
// ^^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '>>' should have exactly one parameter.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
operator []=(a, b, [c]) => true;
// ^^^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '[]=' should have exactly two parameters.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
operator [](a, [b]) => true;
// ^^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '[]' should have exactly one parameter.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
operator ~(a, [b]) => true;
// ^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '~' shouldn't have any parameters.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
}
class Operators6 {
@@ -456,116 +414,78 @@
// ^^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '==' should have exactly one parameter.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
operator <(a, {b}) => true;
// ^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '<' should have exactly one parameter.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
operator >(a, {b}) => true;
// ^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '>' should have exactly one parameter.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
operator <=(a, {b}) => true;
// ^^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '<=' should have exactly one parameter.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
operator >=(a, {b}) => true;
// ^^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '>=' should have exactly one parameter.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
operator -(a, {b}) => true;
// ^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '-' should have zero or one parameter.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
operator +(a, {b}) => true;
// ^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '+' should have exactly one parameter.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
operator /(a, {b}) => true;
// ^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '/' should have exactly one parameter.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
operator ~/(a, {b}) => true;
// ^^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '~/' should have exactly one parameter.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
operator *(a, {b}) => true;
// ^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '*' should have exactly one parameter.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
operator %(a, {b}) => true;
// ^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '%' should have exactly one parameter.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
operator |(a, {b}) => true;
// ^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '|' should have exactly one parameter.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
operator ^(a, {b}) => true;
// ^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '^' should have exactly one parameter.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
operator &(a, {b}) => true;
// ^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '&' should have exactly one parameter.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
operator <<(a, {b}) => true;
// ^^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '<<' should have exactly one parameter.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
operator >>(a, {b}) => true;
// ^^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '>>' should have exactly one parameter.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
operator []=(a, b, {c}) => true;
// ^^^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '[]=' should have exactly two parameters.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
operator [](a, {b}) => true;
// ^^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '[]' should have exactly one parameter.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
operator ~(a, {b}) => true;
// ^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '~' shouldn't have any parameters.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
}
class Operators7 {
diff --git a/tests/language/operator/operator_triple_shift_error_test.dart b/tests/language/operator/operator_triple_shift_error_test.dart
index ffe2632..1b2bf5bb 100644
--- a/tests/language/operator/operator_triple_shift_error_test.dart
+++ b/tests/language/operator/operator_triple_shift_error_test.dart
@@ -24,16 +24,16 @@
Object? operator >>>(arg1, [arg2]) => arg1;
// ^
// [cfe] Operator '>>>' should have exactly one parameter.
- // ^^^^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+ // ^^^
+ // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
}
class C1N1 {
Object? operator >>>(arg1, {arg2}) => arg1;
// ^
// [cfe] Operator '>>>' should have exactly one parameter.
- // ^^^^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
+ // ^^^
+ // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
}
class C0 {
diff --git a/tests/language_2/operator/invalid_operators_test.dart b/tests/language_2/operator/invalid_operators_test.dart
index 32b6399..7efa98b 100644
--- a/tests/language_2/operator/invalid_operators_test.dart
+++ b/tests/language_2/operator/invalid_operators_test.dart
@@ -242,8 +242,6 @@
// ^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '~' shouldn't have any parameters.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
}
class Operators4 {
@@ -329,8 +327,6 @@
// ^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '~' shouldn't have any parameters.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
}
class Operators5 {
@@ -338,116 +334,78 @@
// ^^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '==' should have exactly one parameter.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
operator <(a, [b]) => true;
// ^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '<' should have exactly one parameter.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
operator >(a, [b]) => true;
// ^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '>' should have exactly one parameter.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
operator <=(a, [b]) => true;
// ^^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '<=' should have exactly one parameter.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
operator >=(a, [b]) => true;
// ^^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '>=' should have exactly one parameter.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
operator -(a, [b]) => true;
// ^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '-' should have zero or one parameter.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
operator +(a, [b]) => true;
// ^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '+' should have exactly one parameter.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
operator /(a, [b]) => true;
// ^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '/' should have exactly one parameter.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
operator ~/(a, [b]) => true;
// ^^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '~/' should have exactly one parameter.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
operator *(a, [b]) => true;
// ^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '*' should have exactly one parameter.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
operator %(a, [b]) => true;
// ^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '%' should have exactly one parameter.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
operator |(a, [b]) => true;
// ^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '|' should have exactly one parameter.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
operator ^(a, [b]) => true;
// ^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '^' should have exactly one parameter.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
operator &(a, [b]) => true;
// ^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '&' should have exactly one parameter.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
operator <<(a, [b]) => true;
// ^^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '<<' should have exactly one parameter.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
operator >>(a, [b]) => true;
// ^^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '>>' should have exactly one parameter.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
operator []=(a, b, [c]) => true;
// ^^^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '[]=' should have exactly two parameters.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
operator [](a, [b]) => true;
// ^^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '[]' should have exactly one parameter.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
operator ~(a, [b]) => true;
// ^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '~' shouldn't have any parameters.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
}
class Operators6 {
@@ -455,116 +413,78 @@
// ^^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '==' should have exactly one parameter.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
operator <(a, {b}) => true;
// ^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '<' should have exactly one parameter.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
operator >(a, {b}) => true;
// ^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '>' should have exactly one parameter.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
operator <=(a, {b}) => true;
// ^^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '<=' should have exactly one parameter.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
operator >=(a, {b}) => true;
// ^^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '>=' should have exactly one parameter.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
operator -(a, {b}) => true;
// ^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '-' should have zero or one parameter.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
operator +(a, {b}) => true;
// ^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '+' should have exactly one parameter.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
operator /(a, {b}) => true;
// ^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '/' should have exactly one parameter.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
operator ~/(a, {b}) => true;
// ^^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '~/' should have exactly one parameter.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
operator *(a, {b}) => true;
// ^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '*' should have exactly one parameter.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
operator %(a, {b}) => true;
// ^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '%' should have exactly one parameter.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
operator |(a, {b}) => true;
// ^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '|' should have exactly one parameter.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
operator ^(a, {b}) => true;
// ^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '^' should have exactly one parameter.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
operator &(a, {b}) => true;
// ^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '&' should have exactly one parameter.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
operator <<(a, {b}) => true;
// ^^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '<<' should have exactly one parameter.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
operator >>(a, {b}) => true;
// ^^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '>>' should have exactly one parameter.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
operator []=(a, b, {c}) => true;
// ^^^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '[]=' should have exactly two parameters.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
operator [](a, {b}) => true;
// ^^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '[]' should have exactly one parameter.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
operator ~(a, {b}) => true;
// ^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
// [cfe] Operator '~' shouldn't have any parameters.
- // ^
- // [analyzer] COMPILE_TIME_ERROR.OPTIONAL_PARAMETER_IN_OPERATOR
}
class Operators7 {
diff --git a/tools/VERSION b/tools/VERSION
index 7b6bfe1..1f6d95e 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
MAJOR 2
MINOR 13
PATCH 0
-PRERELEASE 42
+PRERELEASE 43
PRERELEASE_PATCH 0
\ No newline at end of file