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

Unified Diff: lib/info.dart

Issue 2402473002: Add ClosureInfo for closures. (Closed)
Patch Set: update parse test Created 4 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 | « bin/debug_info.dart ('k') | lib/json_info_codec.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: lib/info.dart
diff --git a/lib/info.dart b/lib/info.dart
index 9661dccd5b42e0e8c0f0524756c58a60abe9545d..e25eb431369a59b4e4bbfe413b148b440db43f9a 100644
--- a/lib/info.dart
+++ b/lib/info.dart
@@ -104,6 +104,9 @@ class AllInfo {
// and we'll include it only once in the output.
List<ConstantInfo> constants = <ConstantInfo>[];
+ /// Information about closures anywhere in the program.
+ List<ClosureInfo> closures = <ClosureInfo>[];
+
/// Information about output units (should be just one entry if not using
/// deferred loading).
List<OutputUnitInfo> outputUnits = <OutputUnitInfo>[];
@@ -123,7 +126,7 @@ class AllInfo {
/// Major version indicating breaking changes in the format. A new version
/// means that an old deserialization algorithm will not work with the new
/// format.
- final int version = 4;
+ final int version = 5;
/// Minor version indicating non-breaking changes in the format. A change in
/// this version number means that the json parsing in this library from a
@@ -263,7 +266,7 @@ class FieldInfo extends BasicInfo with CodeInfo {
String inferredType;
/// Nested closures seen in the field initializer.
- List<FunctionInfo> closures;
+ List<ClosureInfo> closures;
/// The actual generated code for the field.
String code;
@@ -321,7 +324,7 @@ class FunctionInfo extends BasicInfo with CodeInfo {
FunctionModifiers modifiers;
/// Nested closures that appear within the body of this function.
- List<FunctionInfo> closures;
+ List<ClosureInfo> closures;
/// The type of this function.
String type;
@@ -371,6 +374,22 @@ class FunctionInfo extends BasicInfo with CodeInfo {
dynamic accept(InfoVisitor visitor) => visitor.visitFunction(this);
}
+/// Information about a closure, also known as a local function.
+class ClosureInfo extends BasicInfo {
+ static int _ids = 0;
+
+ /// The function that is wrapped by this closure.
+ FunctionInfo function;
+
+ ClosureInfo(
+ {String name, OutputUnitInfo outputUnit, int size: 0, this.function})
+ : super(InfoKind.closure, _ids++, name, outputUnit, size, null);
+
+ ClosureInfo._(String serializedId) : super._fromId(serializedId);
+
+ dynamic accept(InfoVisitor visitor) => visitor.visitClosure(this);
+}
+
/// Information about how a dependency is used.
class DependencyInfo {
/// The dependency, either a FunctionInfo or FieldInfo.
@@ -407,7 +426,7 @@ class FunctionModifiers {
this.isExternal: false});
}
-/// Possible values of the `kind` field in the serialied infos.
+/// Possible values of the `kind` field in the serialized infos.
enum InfoKind {
library,
clazz,
@@ -416,6 +435,7 @@ enum InfoKind {
constant,
outputUnit,
typedef,
+ closure,
}
String kindToString(InfoKind kind) {
@@ -434,6 +454,8 @@ String kindToString(InfoKind kind) {
return 'outputUnit';
case InfoKind.typedef:
return 'typedef';
+ case InfoKind.closure:
+ return 'closure';
default:
return null;
}
@@ -461,6 +483,8 @@ InfoKind kindFromString(String kind) {
return InfoKind.outputUnit;
case 'typedef':
return InfoKind.typedef;
+ case 'closure':
+ return InfoKind.closure;
default:
return null;
}
@@ -476,6 +500,7 @@ abstract class InfoVisitor<T> {
T visitConstant(ConstantInfo info);
T visitFunction(FunctionInfo info);
T visitTypedef(TypedefInfo info);
+ T visitClosure(ClosureInfo info);
T visitOutput(OutputUnitInfo info);
}
@@ -508,15 +533,18 @@ class RecursiveInfoVisitor extends InfoVisitor<Null> {
}
visitField(FieldInfo info) {
- info.closures.forEach(visitFunction);
+ info.closures.forEach(visitClosure);
}
visitConstant(ConstantInfo info) {}
visitFunction(FunctionInfo info) {
- info.closures.forEach(visitFunction);
+ info.closures.forEach(visitClosure);
}
visitTypedef(TypedefInfo info) {}
visitOutput(OutputUnitInfo info) {}
+ visitClosure(ClosureInfo info) {
+ visitFunction(info.function);
+ }
}
« no previous file with comments | « bin/debug_info.dart ('k') | lib/json_info_codec.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698