mirror of
https://github.com/dart-lang/sdk
synced 2024-09-16 03:17:55 +00:00
Complain about bad operator parameters.
R=karlklose@google.com Review-Url: https://codereview.chromium.org/2782843002 .
This commit is contained in:
parent
a994d0e47e
commit
695ebae97a
|
@ -11,6 +11,9 @@ import 'builder.dart'
|
|||
|
||||
abstract class FormalParameterBuilder<T extends TypeBuilder>
|
||||
extends ModifierBuilder {
|
||||
@override
|
||||
final int charOffset;
|
||||
|
||||
final List<MetadataBuilder> metadata;
|
||||
|
||||
final int modifiers;
|
||||
|
@ -25,7 +28,7 @@ abstract class FormalParameterBuilder<T extends TypeBuilder>
|
|||
FormalParameterType kind = FormalParameterType.REQUIRED;
|
||||
|
||||
FormalParameterBuilder(this.metadata, this.modifiers, this.type, this.name,
|
||||
this.hasThis, LibraryBuilder compilationUnit, int charOffset)
|
||||
this.hasThis, LibraryBuilder compilationUnit, this.charOffset)
|
||||
: super(compilationUnit, charOffset);
|
||||
|
||||
bool get isRequired => kind.isRequired;
|
||||
|
|
|
@ -99,3 +99,34 @@ String operatorToString(Operator operator) {
|
|||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
int operatorRequiredArgumentCount(Operator operator) {
|
||||
switch (operator) {
|
||||
case Operator.bitwiseNot:
|
||||
case Operator.unaryMinus:
|
||||
return 0;
|
||||
|
||||
case Operator.add:
|
||||
case Operator.bitwiseAnd:
|
||||
case Operator.bitwiseOr:
|
||||
case Operator.bitwiseXor:
|
||||
case Operator.divide:
|
||||
case Operator.equals:
|
||||
case Operator.greaterThan:
|
||||
case Operator.greaterThanEquals:
|
||||
case Operator.indexGet:
|
||||
case Operator.leftShift:
|
||||
case Operator.lessThan:
|
||||
case Operator.lessThanEquals:
|
||||
case Operator.modulo:
|
||||
case Operator.multiply:
|
||||
case Operator.rightShift:
|
||||
case Operator.subtract:
|
||||
case Operator.truncatingDivide:
|
||||
return 1;
|
||||
|
||||
case Operator.indexSet:
|
||||
return 2;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
|
|
@ -31,7 +31,12 @@ import 'unhandled_listener.dart' show NullValue, Unhandled, UnhandledListener;
|
|||
import '../parser/dart_vm_native.dart'
|
||||
show removeNativeClause, skipNativeClause;
|
||||
|
||||
import '../operator.dart' show Operator, operatorFromString, operatorToString;
|
||||
import '../operator.dart'
|
||||
show
|
||||
Operator,
|
||||
operatorFromString,
|
||||
operatorToString,
|
||||
operatorRequiredArgumentCount;
|
||||
|
||||
import '../quote.dart' show unescapeString;
|
||||
|
||||
|
@ -369,6 +374,22 @@ class OutlineBuilder extends UnhandledListener {
|
|||
if (nameOrOperator is Operator) {
|
||||
name = operatorToString(nameOrOperator);
|
||||
kind = ProcedureKind.Operator;
|
||||
int requiredArgumentCount = operatorRequiredArgumentCount(nameOrOperator);
|
||||
if ((formals?.length ?? 0) != requiredArgumentCount) {
|
||||
library.addCompileTimeError(
|
||||
charOffset,
|
||||
"Operator '$name' must have exactly $requiredArgumentCount "
|
||||
"parameters.");
|
||||
} else {
|
||||
if (formals != null) {
|
||||
for (FormalParameterBuilder formal in formals) {
|
||||
if (!formal.isRequired) {
|
||||
library.addCompileTimeError(formal.charOffset,
|
||||
"An operator can't have optional parameters.");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
name = nameOrOperator;
|
||||
kind = computeProcedureKind(getOrSet);
|
||||
|
|
|
@ -44,34 +44,6 @@ Language/Classes/Getters/syntax_t03: MissingCompileTimeError
|
|||
Language/Classes/Getters/syntax_t04: MissingCompileTimeError
|
||||
Language/Classes/Getters/syntax_t05: MissingCompileTimeError
|
||||
Language/Classes/Getters/syntax_t07: MissingCompileTimeError
|
||||
Language/Classes/Instance_Methods/Operators/arity_0_or_1_t02: MissingCompileTimeError
|
||||
Language/Classes/Instance_Methods/Operators/arity_0_t02: MissingCompileTimeError
|
||||
Language/Classes/Instance_Methods/Operators/arity_1_t01: MissingCompileTimeError
|
||||
Language/Classes/Instance_Methods/Operators/arity_1_t02: MissingCompileTimeError
|
||||
Language/Classes/Instance_Methods/Operators/arity_1_t03: MissingCompileTimeError
|
||||
Language/Classes/Instance_Methods/Operators/arity_1_t04: MissingCompileTimeError
|
||||
Language/Classes/Instance_Methods/Operators/arity_1_t05: MissingCompileTimeError
|
||||
Language/Classes/Instance_Methods/Operators/arity_1_t06: MissingCompileTimeError
|
||||
Language/Classes/Instance_Methods/Operators/arity_1_t07: MissingCompileTimeError
|
||||
Language/Classes/Instance_Methods/Operators/arity_1_t08: MissingCompileTimeError
|
||||
Language/Classes/Instance_Methods/Operators/arity_1_t09: MissingCompileTimeError
|
||||
Language/Classes/Instance_Methods/Operators/arity_1_t10: MissingCompileTimeError
|
||||
Language/Classes/Instance_Methods/Operators/arity_1_t11: MissingCompileTimeError
|
||||
Language/Classes/Instance_Methods/Operators/arity_1_t12: MissingCompileTimeError
|
||||
Language/Classes/Instance_Methods/Operators/arity_1_t13: MissingCompileTimeError
|
||||
Language/Classes/Instance_Methods/Operators/arity_1_t14: MissingCompileTimeError
|
||||
Language/Classes/Instance_Methods/Operators/arity_1_t15: MissingCompileTimeError
|
||||
Language/Classes/Instance_Methods/Operators/arity_1_t16: MissingCompileTimeError
|
||||
Language/Classes/Instance_Methods/Operators/arity_1_t17: MissingCompileTimeError
|
||||
Language/Classes/Instance_Methods/Operators/arity_1_t18: MissingCompileTimeError
|
||||
Language/Classes/Instance_Methods/Operators/arity_2_t01: MissingCompileTimeError
|
||||
Language/Classes/Instance_Methods/Operators/arity_2_t02: MissingCompileTimeError
|
||||
Language/Classes/Instance_Methods/Operators/optional_parameter_t01: MissingCompileTimeError
|
||||
Language/Classes/Instance_Methods/Operators/optional_parameter_t02: MissingCompileTimeError
|
||||
Language/Classes/Instance_Methods/Operators/optional_parameter_t03: MissingCompileTimeError
|
||||
Language/Classes/Instance_Methods/Operators/optional_parameter_t04: MissingCompileTimeError
|
||||
Language/Classes/Instance_Methods/Operators/optional_parameter_t06: MissingCompileTimeError
|
||||
Language/Classes/Instance_Methods/Operators/optional_parameter_t08: MissingCompileTimeError
|
||||
Language/Classes/Instance_Methods/Operators/syntax_t04: MissingCompileTimeError
|
||||
Language/Classes/Instance_Methods/same_name_setter_t01: CompileTimeError
|
||||
Language/Classes/Instance_Variables/constant_t01: MissingCompileTimeError
|
||||
|
|
|
@ -3,8 +3,7 @@
|
|||
# BSD-style license that can be found in the LICENSE file.
|
||||
|
||||
[ $compiler == dartk || $compiler == dartkp ]
|
||||
arg_param_trailing_comma_test/107: MissingCompileTimeError
|
||||
await_for_test: RuntimeError
|
||||
await_for_test: RuntimeError # Kernel Issue 29192
|
||||
bad_constructor_test/05: CompileTimeError
|
||||
bad_initializer1_negative_test: Crash
|
||||
bad_raw_string_negative_test: Fail
|
||||
|
|
Loading…
Reference in a new issue