Index: sdk/lib/mirrors/mirrors.dart |
diff --git a/sdk/lib/mirrors/mirrors.dart b/sdk/lib/mirrors/mirrors.dart |
index 3275884443ae0058fc912cb2e1a17d166e943922..d16e62eecb7fc4e63e4518e7ffd4398b8c562fda 100644 |
--- a/sdk/lib/mirrors/mirrors.dart |
+++ b/sdk/lib/mirrors/mirrors.dart |
@@ -496,6 +496,16 @@ abstract class ClosureMirror implements InstanceMirror { |
* |
* The function associated with an instance of a class that has a [:call:] |
* method is that [:call:] method. |
+ * |
+ * A Dart implementation might choose to create a class for each closure |
+ * expression, in which case [:function:] would be the same as |
+ * [:type.declarations[#call]:]. But the Dart language model does not require |
+ * this. A more typical implementation involves a single closure class for |
+ * each type signature, where the call method dispatches to a function held |
+ * in the closure rather the call method |
+ * directly implementing the closure body. So one cannot rely on closures from |
+ * distinct closure expressions having distinct classes ([:type:]), but one |
+ * can rely on them having distinct functions ([:function:]). |
*/ |
MethodMirror get function; |
@@ -829,6 +839,8 @@ abstract class FunctionTypeMirror implements ClassMirror { |
/** |
* A mirror on the [:call:] method for the reflectee. |
*/ |
+ // This is only here because in the past the VM did not implement a call |
+ // method on closures. |
MethodMirror get callMethod; |
} |