Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(7)

Unified Diff: packages/analyzer/lib/src/generated/constant.dart

Issue 1400473008: Roll Observatory packages and add a roll script (Closed) Base URL: git@github.com:dart-lang/observatory_pub_packages.git@master
Patch Set: Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « packages/analyzer/lib/src/generated/ast.dart ('k') | packages/analyzer/lib/src/generated/element.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: packages/analyzer/lib/src/generated/constant.dart
diff --git a/analyzer/lib/src/generated/constant.dart b/packages/analyzer/lib/src/generated/constant.dart
similarity index 96%
rename from analyzer/lib/src/generated/constant.dart
rename to packages/analyzer/lib/src/generated/constant.dart
index 572caab8e0fff2200e8ff794b35ed9de9155d7d0..0f4c0f6ebb0de586599a9d557eb3e8bf46d75e68 100644
--- a/analyzer/lib/src/generated/constant.dart
+++ b/packages/analyzer/lib/src/generated/constant.dart
@@ -2,9 +2,6 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-// This code was auto-generated, is not intended to be edited, and is subject to
-// significant change. Please see the README file for more information.
-
library engine.constant;
import 'dart:collection';
@@ -217,6 +214,11 @@ class ConstantEvaluationEngine {
"^(?:${ConstantValueComputer._OPERATOR_RE}\$|$_PUBLIC_IDENTIFIER_RE(?:=?\$|[.](?!\$)))+?\$");
/**
+ * The type provider used to access the known types.
+ */
+ final TypeProvider typeProvider;
+
+ /**
* The type system. This is used to gues the types of constants when their
* exact value is unknown.
*/
@@ -240,17 +242,12 @@ class ConstantEvaluationEngine {
* given, is used to verify correct dependency analysis when running unit
* tests.
*/
- ConstantEvaluationEngine(TypeProvider typeProvider, this._declaredVariables,
- {ConstantEvaluationValidator validator})
+ ConstantEvaluationEngine(this.typeProvider, this._declaredVariables,
+ {ConstantEvaluationValidator validator, TypeSystem typeSystem})
: validator = validator != null
- ? validator
- : new ConstantEvaluationValidator_ForProduction(),
- typeSystem = new TypeSystemImpl(typeProvider);
-
- /**
- * The type provider used to access the known types.
- */
- TypeProvider get typeProvider => typeSystem.typeProvider;
+ ? validator
+ : new ConstantEvaluationValidator_ForProduction(),
+ typeSystem = typeSystem != null ? typeSystem : new TypeSystemImpl();
/**
* Check that the arguments to a call to fromEnvironment() are correct. The
@@ -261,7 +258,8 @@ class ConstantEvaluationEngine {
* "defaultValue" is always allowed to be null. Return `true` if the arguments
* are correct, `false` if there is an error.
*/
- bool checkFromEnvironmentArguments(NodeList<Expression> arguments,
+ bool checkFromEnvironmentArguments(
+ NodeList<Expression> arguments,
List<DartObjectImpl> argumentValues,
HashMap<String, DartObjectImpl> namedArgumentValues,
InterfaceType expectedDefaultValueType) {
@@ -300,7 +298,8 @@ class ConstantEvaluationEngine {
* named arguments. Return `true` if the arguments are correct, `false` if
* there is an error.
*/
- bool checkSymbolArguments(NodeList<Expression> arguments,
+ bool checkSymbolArguments(
+ NodeList<Expression> arguments,
List<DartObjectImpl> argumentValues,
HashMap<String, DartObjectImpl> namedArgumentValues) {
if (arguments.length != 1) {
@@ -352,7 +351,8 @@ class ConstantEvaluationEngine {
if (!runtimeTypeMatch(dartObject, constant.type)) {
errorReporter.reportErrorForElement(
CheckedModeCompileTimeErrorCode.VARIABLE_TYPE_MISMATCH,
- constant, [dartObject.type, constant.type]);
+ constant,
+ [dartObject.type, constant.type]);
}
}
(constant as VariableElementImpl).evaluationResult =
@@ -400,8 +400,11 @@ class ConstantEvaluationEngine {
errorListener, sourceCompilationUnit.element.source);
ConstantVisitor constantVisitor =
new ConstantVisitor(this, errorReporter);
- DartObjectImpl result = evaluateConstructorCall(constNode,
- constNode.arguments.arguments, element, constantVisitor,
+ DartObjectImpl result = evaluateConstructorCall(
+ constNode,
+ constNode.arguments.arguments,
+ element,
+ constantVisitor,
errorReporter);
elementAnnotation.evaluationResult =
new EvaluationResultImpl(result, errorListener.errors);
@@ -546,7 +549,8 @@ class ConstantEvaluationEngine {
* fromEnvironment(). Return a [DartObjectImpl] object corresponding to the
* evaluated result.
*/
- DartObjectImpl computeValueFromEnvironment(DartObject environmentValue,
+ DartObjectImpl computeValueFromEnvironment(
+ DartObject environmentValue,
DartObjectImpl builtInDefaultValue,
HashMap<String, DartObjectImpl> namedArgumentValues) {
DartObjectImpl value = environmentValue as DartObjectImpl;
@@ -573,9 +577,12 @@ class ConstantEvaluationEngine {
return value;
}
- DartObjectImpl evaluateConstructorCall(AstNode node,
- NodeList<Expression> arguments, ConstructorElement constructor,
- ConstantVisitor constantVisitor, ErrorReporter errorReporter) {
+ DartObjectImpl evaluateConstructorCall(
+ AstNode node,
+ NodeList<Expression> arguments,
+ ConstructorElement constructor,
+ ConstantVisitor constantVisitor,
+ ErrorReporter errorReporter) {
if (!_getConstructorBase(constructor).isCycleFree) {
// It's not safe to evaluate this constructor, so bail out.
// TODO(paulberry): ensure that a reasonable error message is produced
@@ -624,21 +631,24 @@ class ConstantEvaluationEngine {
DartObject valueFromEnvironment;
valueFromEnvironment =
_declaredVariables.getBool(typeProvider, variableName);
- return computeValueFromEnvironment(valueFromEnvironment,
+ return computeValueFromEnvironment(
+ valueFromEnvironment,
new DartObjectImpl(typeProvider.boolType, BoolState.FALSE_STATE),
namedArgumentValues);
} else if (identical(definingClass, typeProvider.intType)) {
DartObject valueFromEnvironment;
valueFromEnvironment =
_declaredVariables.getInt(typeProvider, variableName);
- return computeValueFromEnvironment(valueFromEnvironment,
+ return computeValueFromEnvironment(
+ valueFromEnvironment,
new DartObjectImpl(typeProvider.nullType, NullState.NULL_STATE),
namedArgumentValues);
} else if (identical(definingClass, typeProvider.stringType)) {
DartObject valueFromEnvironment;
valueFromEnvironment =
_declaredVariables.getString(typeProvider, variableName);
- return computeValueFromEnvironment(valueFromEnvironment,
+ return computeValueFromEnvironment(
+ valueFromEnvironment,
new DartObjectImpl(typeProvider.nullType, NullState.NULL_STATE),
namedArgumentValues);
}
@@ -690,7 +700,8 @@ class ConstantEvaluationEngine {
if (fieldValue != null && !runtimeTypeMatch(fieldValue, fieldType)) {
errorReporter.reportErrorForNode(
CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_FIELD_TYPE_MISMATCH,
- node, [fieldValue.type, field.name, fieldType]);
+ node,
+ [fieldValue.type, field.name, fieldType]);
}
fieldMap[field.name] = evaluationResult.value;
}
@@ -737,7 +748,8 @@ class ConstantEvaluationEngine {
if (!runtimeTypeMatch(argumentValue, parameter.type)) {
errorReporter.reportErrorForNode(
CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH,
- errorTarget, [argumentValue.type, parameter.type]);
+ errorTarget,
+ [argumentValue.type, parameter.type]);
}
if (baseParameter.isInitializingFormal) {
FieldElement field = (parameter as FieldFormalParameterElement).field;
@@ -750,7 +762,8 @@ class ConstantEvaluationEngine {
if (!runtimeTypeMatch(argumentValue, fieldType)) {
errorReporter.reportErrorForNode(
CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH,
- errorTarget, [argumentValue.type, fieldType]);
+ errorTarget,
+ [argumentValue.type, fieldType]);
}
}
String fieldName = field.name;
@@ -767,7 +780,8 @@ class ConstantEvaluationEngine {
}
}
ConstantVisitor initializerVisitor = new ConstantVisitor(
- this, errorReporter, lexicalEnvironment: parameterMap);
+ this, errorReporter,
+ lexicalEnvironment: parameterMap);
String superName = null;
NodeList<Expression> superArguments = null;
for (ConstructorInitializer initializer in initializers) {
@@ -790,7 +804,8 @@ class ConstantEvaluationEngine {
if (!runtimeTypeMatch(evaluationResult, field.type)) {
errorReporter.reportErrorForNode(
CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_FIELD_TYPE_MISMATCH,
- node, [evaluationResult.type, fieldName, field.type]);
+ node,
+ [evaluationResult.type, fieldName, field.type]);
}
}
}
@@ -806,9 +821,12 @@ class ConstantEvaluationEngine {
// it redirects to.
ConstructorElement constructor = initializer.staticElement;
if (constructor != null && constructor.isConst) {
- return evaluateConstructorCall(node,
- initializer.argumentList.arguments, constructor,
- initializerVisitor, errorReporter);
+ return evaluateConstructorCall(
+ node,
+ initializer.argumentList.arguments,
+ constructor,
+ initializerVisitor,
+ errorReporter);
}
}
}
@@ -828,10 +846,13 @@ class ConstantEvaluationEngine {
return new DartObjectImpl(definingClass, new GenericState(fieldMap));
}
- void evaluateSuperConstructorCall(AstNode node,
+ void evaluateSuperConstructorCall(
+ AstNode node,
HashMap<String, DartObjectImpl> fieldMap,
- ConstructorElement superConstructor, NodeList<Expression> superArguments,
- ConstantVisitor initializerVisitor, ErrorReporter errorReporter) {
+ ConstructorElement superConstructor,
+ NodeList<Expression> superArguments,
+ ConstantVisitor initializerVisitor,
+ ErrorReporter errorReporter) {
if (superConstructor != null && superConstructor.isConst) {
DartObjectImpl evaluationResult = evaluateConstructorCall(node,
superArguments, superConstructor, initializerVisitor, errorReporter);
@@ -997,6 +1018,9 @@ class ConstantEvaluationTarget_Annotation implements ConstantEvaluationTarget {
return false;
}
}
+
+ @override
+ String toString() => 'Constant: $annotation';
}
/**
@@ -1061,62 +1085,81 @@ class ConstantEvaluationValidator_ForProduction
void beforeGetParameterDefault(ParameterElement parameter) {}
}
-/**
- * Instances of the class `ConstantEvaluator` evaluate constant expressions to
- * produce their compile-time value. According to the Dart Language
- * Specification:
- * <blockquote>
- * A constant expression is one of the following:
- * * A literal number.
- * * A literal boolean.
- * * A literal string where any interpolated expression is a compile-time
- * constant that evaluates to a numeric, string or boolean value or to
- * <b>null</b>.
- * * A literal symbol.
- * * <b>null</b>.
- * * A qualified reference to a static constant variable.
- * * An identifier expression that denotes a constant variable, class or type
- * alias.
- * * A constant constructor invocation.
- * * A constant list literal.
- * * A constant map literal.
- * * A simple or qualified identifier denoting a top-level function or a static
- * method.
- * * A parenthesized expression <i>(e)</i> where <i>e</i> is a constant
- * expression.
- * * An expression of the form <i>identical(e<sub>1</sub>, e<sub>2</sub>)</i>
- * where <i>e<sub>1</sub></i> and <i>e<sub>2</sub></i> are constant
- * expressions and <i>identical()</i> is statically bound to the predefined
- * dart function <i>identical()</i> discussed above.
- * * An expression of one of the forms <i>e<sub>1</sub> == e<sub>2</sub></i> or
- * <i>e<sub>1</sub> != e<sub>2</sub></i> where <i>e<sub>1</sub></i> and
- * <i>e<sub>2</sub></i> are constant expressions that evaluate to a numeric,
- * string or boolean value.
- * * An expression of one of the forms <i>!e</i>, <i>e<sub>1</sub> &amp;&amp;
- * e<sub>2</sub></i> or <i>e<sub>1</sub> || e<sub>2</sub></i>, where <i>e</i>,
- * <i>e1</sub></i> and <i>e2</sub></i> are constant expressions that evaluate
- * to a boolean value.
- * * An expression of one of the forms <i>~e</i>, <i>e<sub>1</sub> ^
- * e<sub>2</sub></i>, <i>e<sub>1</sub> &amp; e<sub>2</sub></i>,
- * <i>e<sub>1</sub> | e<sub>2</sub></i>, <i>e<sub>1</sub> &gt;&gt;
- * e<sub>2</sub></i> or <i>e<sub>1</sub> &lt;&lt; e<sub>2</sub></i>, where
- * <i>e</i>, <i>e<sub>1</sub></i> and <i>e<sub>2</sub></i> are constant
- * expressions that evaluate to an integer value or to <b>null</b>.
- * * An expression of one of the forms <i>-e</i>, <i>e<sub>1</sub> +
- * e<sub>2</sub></i>, <i>e<sub>1</sub> -e<sub>2</sub></i>, <i>e<sub>1</sub> *
- * e<sub>2</sub></i>, <i>e<sub>1</sub> / e<sub>2</sub></i>, <i>e<sub>1</sub>
- * ~/ e<sub>2</sub></i>, <i>e<sub>1</sub> &gt; e<sub>2</sub></i>,
- * <i>e<sub>1</sub> &lt; e<sub>2</sub></i>, <i>e<sub>1</sub> &gt;=
- * e<sub>2</sub></i>, <i>e<sub>1</sub> &lt;= e<sub>2</sub></i> or
- * <i>e<sub>1</sub> % e<sub>2</sub></i>, where <i>e</i>, <i>e<sub>1</sub></i>
- * and <i>e<sub>2</sub></i> are constant expressions that evaluate to a
- * numeric value or to <b>null</b>.
- * * An expression of the form <i>e<sub>1</sub> ? e<sub>2</sub> :
- * e<sub>3</sub></i> where <i>e<sub>1</sub></i>, <i>e<sub>2</sub></i> and
- * <i>e<sub>3</sub></i> are constant expressions, and <i>e<sub>1</sub></i>
- * evaluates to a boolean value.
- * </blockquote>
- */
+/// Instances of the class [ConstantEvaluator] evaluate constant expressions to
+/// produce their compile-time value.
+///
+/// According to the Dart Language Specification:
+///
+/// > A constant expression is one of the following:
+/// >
+/// > * A literal number.
+/// > * A literal boolean.
+/// > * A literal string where any interpolated expression is a compile-time
+/// > constant that evaluates to a numeric, string or boolean value or to
+/// > **null**.
+/// > * A literal symbol.
+/// > * **null**.
+/// > * A qualified reference to a static constant variable.
+/// > * An identifier expression that denotes a constant variable, class or type
+/// > alias.
+/// > * A constant constructor invocation.
+/// > * A constant list literal.
+/// > * A constant map literal.
+/// > * A simple or qualified identifier denoting a top-level function or a
+/// > static method.
+/// > * A parenthesized expression _(e)_ where _e_ is a constant expression.
+/// > * <span>
+/// > An expression of the form <i>identical(e<sub>1</sub>, e<sub>2</sub>)</i>
+/// > where <i>e<sub>1</sub></i> and <i>e<sub>2</sub></i> are constant
+/// > expressions and <i>identical()</i> is statically bound to the predefined
+/// > dart function <i>identical()</i> discussed above.
+/// > </span>
+/// > * <span>
+/// > An expression of one of the forms <i>e<sub>1</sub> == e<sub>2</sub></i>
+/// > or <i>e<sub>1</sub> != e<sub>2</sub></i> where <i>e<sub>1</sub></i> and
+/// > <i>e<sub>2</sub></i> are constant expressions that evaluate to a
+/// > numeric, string or boolean value.
+/// > </span>
+/// > * <span>
+/// > An expression of one of the forms <i>!e</i>, <i>e<sub>1</sub> &amp;&amp;
+/// > e<sub>2</sub></i> or <i>e<sub>1</sub> || e<sub>2</sub></i>, where
+/// > <i>e</i>, <i>e<sub>1</sub></i> and <i>e<sub>2</sub></i> are constant
+/// > expressions that evaluate to a boolean value.
+/// > </span>
+/// > * <span>
+/// > An expression of one of the forms <i>~e</i>, <i>e<sub>1</sub> ^
+/// > e<sub>2</sub></i>, <i>e<sub>1</sub> &amp; e<sub>2</sub></i>,
+/// > <i>e<sub>1</sub> | e<sub>2</sub></i>, <i>e<sub>1</sub> &gt;&gt;
+/// > e<sub>2</sub></i> or <i>e<sub>1</sub> &lt;&lt; e<sub>2</sub></i>, where
+/// > <i>e</i>, <i>e<sub>1</sub></i> and <i>e<sub>2</sub></i> are constant
+/// > expressions that evaluate to an integer value or to <b>null</b>.
+/// > </span>
+/// > * <span>
+/// > An expression of one of the forms <i>-e</i>, <i>e<sub>1</sub> +
+/// > e<sub>2</sub></i>, <i>e<sub>1</sub> -e<sub>2</sub></i>,
+/// > <i>e<sub>1</sub> * e<sub>2</sub></i>, <i>e<sub>1</sub> /
+/// > e<sub>2</sub></i>, <i>e<sub>1</sub> ~/ e<sub>2</sub></i>,
+/// > <i>e<sub>1</sub> &gt; e<sub>2</sub></i>, <i>e<sub>1</sub> &lt;
+/// > e<sub>2</sub></i>, <i>e<sub>1</sub> &gt;= e<sub>2</sub></i>,
+/// > <i>e<sub>1</sub> &lt;= e<sub>2</sub></i> or <i>e<sub>1</sub> %
+/// > e<sub>2</sub></i>, where <i>e</i>, <i>e<sub>1</sub></i> and
+/// > <i>e<sub>2</sub></i> are constant expressions that evaluate to a numeric
+/// > value or to <b>null</b>.
+/// > </span>
+/// > * <span>
+/// > An expression of the form <i>e<sub>1</sub> ? e<sub>2</sub> :
+/// > e<sub>3</sub></i> where <i>e<sub>1</sub></i>, <i>e<sub>2</sub></i> and
+/// > <i>e<sub>3</sub></i> are constant expressions, and <i>e<sub>1</sub></i>
+/// > evaluates to a boolean value.
+/// > </span>
+///
+/// The values returned by instances of this class are therefore `null` and
+/// instances of the classes `Boolean`, `BigInteger`, `Double`, `String`, and
+/// `DartObject`.
+///
+/// In addition, this class defines several values that can be returned to
+/// indicate various conditions encountered during evaluation. These are
+/// documented with the static fields that define those values.
class ConstantEvaluator {
/**
* The source containing the expression(s) that will be evaluated.
@@ -1129,17 +1172,24 @@ class ConstantEvaluator {
final TypeProvider _typeProvider;
/**
+ * The type system primitives.
+ */
+ final TypeSystem _typeSystem;
+
+ /**
* Initialize a newly created evaluator to evaluate expressions in the given
* [source]. The [typeProvider] is the type provider used to access known
* types.
*/
- ConstantEvaluator(this._source, this._typeProvider);
+ ConstantEvaluator(this._source, this._typeProvider, {TypeSystem typeSystem})
+ : _typeSystem = typeSystem != null ? typeSystem : new TypeSystemImpl();
EvaluationResult evaluate(Expression expression) {
RecordingErrorListener errorListener = new RecordingErrorListener();
ErrorReporter errorReporter = new ErrorReporter(errorListener, _source);
DartObjectImpl result = expression.accept(new ConstantVisitor(
- new ConstantEvaluationEngine(_typeProvider, new DeclaredVariables()),
+ new ConstantEvaluationEngine(_typeProvider, new DeclaredVariables(),
+ typeSystem: _typeSystem),
errorReporter));
if (result != null) {
return EvaluationResult.forValue(result);
@@ -1283,9 +1333,10 @@ class ConstantValueComputer {
*/
ConstantValueComputer(this._context, TypeProvider typeProvider,
DeclaredVariables declaredVariables,
- [ConstantEvaluationValidator validator])
+ [ConstantEvaluationValidator validator, TypeSystem typeSystem])
: evaluationEngine = new ConstantEvaluationEngine(
- typeProvider, declaredVariables, validator: validator);
+ typeProvider, declaredVariables,
+ validator: validator, typeSystem: typeSystem);
/**
* Add the constants in the given compilation [unit] to the list of constants
@@ -1555,7 +1606,8 @@ class ConstantVisitor extends UnifyingAstVisitor<DartObjectImpl> {
ParameterizedType thenType = thenResult.type;
ParameterizedType elseType = elseResult.type;
return new DartObjectImpl.validWithUnknownValue(
- _typeSystem.getLeastUpperBound(thenType, elseType) as InterfaceType);
+ _typeSystem.getLeastUpperBound(_typeProvider, thenType, elseType)
+ as InterfaceType);
}
@override
@@ -2593,9 +2645,10 @@ class DartObjectImpl implements DartObject {
* Throws an [EvaluationException] if the operator is not appropriate for an
* object of this kind.
*/
- DartObjectImpl greaterThanOrEqual(TypeProvider typeProvider,
- DartObjectImpl rightOperand) => new DartObjectImpl(
- typeProvider.boolType, _state.greaterThanOrEqual(rightOperand._state));
+ DartObjectImpl greaterThanOrEqual(
+ TypeProvider typeProvider, DartObjectImpl rightOperand) =>
+ new DartObjectImpl(typeProvider.boolType,
+ _state.greaterThanOrEqual(rightOperand._state));
/**
* Return the result of invoking the '~/' operator on this object with the
@@ -3526,9 +3579,7 @@ class EvaluationResultImpl {
}
@deprecated // Use new EvaluationResultImpl(value, errors)
- EvaluationResultImpl.con2(this.value, List<AnalysisError> errors) {
- this._errors = errors;
- }
+ EvaluationResultImpl.con2(this.value, List<AnalysisError> this._errors);
List<AnalysisError> get errors => _errors;
« no previous file with comments | « packages/analyzer/lib/src/generated/ast.dart ('k') | packages/analyzer/lib/src/generated/element.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698