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

Unified Diff: pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/classes.dart

Issue 2301973002: More DDC mirrors support (Closed)
Patch Set: Format fixes per comments Created 4 years, 3 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
Index: pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/classes.dart
diff --git a/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/classes.dart b/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/classes.dart
index 6bef0d699f3413ba4194c93dc0746f471b210e65..51a703efdab460c4e319eecf19905c70a70b809c 100644
--- a/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/classes.dart
+++ b/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/classes.dart
@@ -145,12 +145,30 @@ getGenericClass(type) =>
getGenericArgs(type) => JS('', '$safeGetOwnProperty($type, $_typeArguments)');
+// TODO(vsm): Collapse into one expando.
final _constructorSig = JS('', 'Symbol("sigCtor")');
-final _methodSig = JS('', 'Symbol("sig")');
-final _staticSig = JS('', 'Symbol("sigStatic")');
+final _methodSig = JS('', 'Symbol("sigMethod")');
+final _fieldSig = JS('', 'Symbol("sigField")');
+final _getterSig= JS('', 'Symbol("sigGetter")');
+final _setterSig= JS('', 'Symbol("sigSetter")');
+final _staticSig = JS('', 'Symbol("sigStaticMethod")');
+final _staticFieldSig = JS('', 'Symbol("sigStaticField")');
+final _staticGetterSig= JS('', 'Symbol("sigStaticGetter")');
+final _staticSetterSig= JS('', 'Symbol("sigStaticSetter")');
final _genericTypeCtor = JS('', 'Symbol("genericType")');
+// TODO(vsm): Collapse this as well - just provide a dart map to mirrors code.
+// These are queried by mirrors code.
+getConstructorSig(value) => JS('', '#[#]', value, _constructorSig);
getMethodSig(value) => JS('', '#[#]', value, _methodSig);
+getFieldSig(value) => JS('', '#[#]', value, _fieldSig);
+getGetterSig(value) => JS('', '#[#]', value, _getterSig);
+getSetterSig(value) => JS('', '#[#]', value, _setterSig);
+getStaticSig(value) => JS('', '#[#]', value, _staticSig);
+getStaticFieldSig(value) => JS('', '#[#]', value, _staticFieldSig);
+getStaticGetterSig(value) => JS('', '#[#]', value, _staticGetterSig);
+getStaticSetterSig(value) => JS('', '#[#]', value, _staticSetterSig);
+
getGenericTypeCtor(value) => JS('', '#[#]', value, _genericTypeCtor);
/// Get the type of a method from an object using the stored signature
@@ -176,7 +194,7 @@ getMethodTypeFromType(type, name) => JS(
classGetConstructorType(cls, name) => JS(
'',
'''(() => {
- if(!$name) $name = $cls.name;
+ if(!$name) $name = 'new';
if ($cls === void 0) return void 0;
if ($cls == null) return void 0;
let sigCtor = $cls[$_constructorSig];
@@ -217,16 +235,21 @@ gbind(f, @rest typeArgs) {
}
// Set up the method signature field on the constructor
-_setMethodSignature(f, sigF) => JS(
+_setInstanceSignature(f, sigF, kind) => JS(
'',
'''(() => {
- $defineMemoizedGetter($f, $_methodSig, () => {
+ $defineMemoizedGetter($f, $kind, () => {
let sigObj = $sigF();
- sigObj.__proto__ = $f.__proto__[$_methodSig];
+ sigObj.__proto__ = $f.__proto__[$kind];
return sigObj;
});
})()''');
+_setMethodSignature(f, sigF) => _setInstanceSignature(f, sigF, _methodSig);
+_setFieldSignature(f, sigF) => _setInstanceSignature(f, sigF, _fieldSig);
+_setGetterSignature(f, sigF) => _setInstanceSignature(f, sigF, _getterSig);
+_setSetterSignature(f, sigF) => _setInstanceSignature(f, sigF, _setterSig);
+
// Set up the constructor signature field on the constructor
_setConstructorSignature(f, sigF) =>
JS('', '$defineMemoizedGetter($f, $_constructorSig, $sigF)');
@@ -235,6 +258,15 @@ _setConstructorSignature(f, sigF) =>
_setStaticSignature(f, sigF) =>
JS('', '$defineMemoizedGetter($f, $_staticSig, $sigF)');
+_setStaticFieldSignature(f, sigF) =>
+ JS('', '$defineMemoizedGetter($f, $_staticFieldSig, $sigF)');
+
+_setStaticGetterSignature(f, sigF) =>
+ JS('', '$defineMemoizedGetter($f, $_staticGetterSig, $sigF)');
+
+_setStaticSetterSignature(f, sigF) =>
+ JS('', '$defineMemoizedGetter($f, $_staticSetterSig, $sigF)');
+
// Set the lazily computed runtime type field on static methods
_setStaticTypes(f, names) => JS(
'',
@@ -258,6 +290,8 @@ _setStaticTypes(f, names) => JS(
/// names: An array of the names of the static methods. Used to
/// permit eagerly setting the runtimeType field on the methods
/// while still lazily computing the type descriptor object.
+/// fields: A function returning an object mapping instance field
+/// names to types.
setSignature(f, signature) => JS(
'',
'''(() => {
@@ -266,13 +300,31 @@ setSignature(f, signature) => JS(
('constructors' in signature) ? signature.constructors : () => ({});
let methods =
('methods' in signature) ? signature.methods : () => ({});
+ let fields =
+ ('fields' in signature) ? signature.fields : () => ({});
+ let getters =
+ ('getters' in signature) ? signature.getters : () => ({});
+ let setters =
+ ('setters' in signature) ? signature.setters : () => ({});
let statics =
('statics' in signature) ? signature.statics : () => ({});
+ let staticFields =
+ ('sfields' in signature) ? signature.sfields : () => ({});
+ let staticGetters =
+ ('sgetters' in signature) ? signature.sgetters : () => ({});
+ let staticSetters =
+ ('ssetters' in signature) ? signature.ssetters : () => ({});
let names =
('names' in signature) ? signature.names : [];
$_setConstructorSignature($f, constructors);
$_setMethodSignature($f, methods);
+ $_setFieldSignature($f, fields);
+ $_setGetterSignature($f, getters);
+ $_setSetterSignature($f, setters);
$_setStaticSignature($f, statics);
+ $_setStaticFieldSignature($f, staticFields);
+ $_setStaticGetterSignature($f, staticGetters);
+ $_setStaticSetterSignature($f, staticSetters);
$_setStaticTypes($f, names);
})()''');
« no previous file with comments | « pkg/dev_compiler/tool/global_compile.dart ('k') | pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/types.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698