Skip to content

Commit

Permalink
Redo "[dart2js] new-rti: Add 'minified:' tag to minified names"
Browse files Browse the repository at this point in the history
This reverts commit ac6a3d9.

Change-Id: Ia8c9bde36e21ad12e9cd08c688043d4b08ae35e5
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/111873
Commit-Queue: Stephen Adams <sra@google.com>
Reviewed-by: Mayank Patke <fishythefish@google.com>
  • Loading branch information
rakudrama authored and commit-bot@chromium.org committed Aug 3, 2019
1 parent 3c1f679 commit 6ff3212
Show file tree
Hide file tree
Showing 6 changed files with 81 additions and 45 deletions.
2 changes: 1 addition & 1 deletion sdk/lib/_internal/js_runtime/lib/js_names.dart
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,7 @@ List extractKeys(victim) {
/// example).
String unmangleGlobalNameIfPreservedAnyways(String name) {
var names = JS_EMBEDDED_GLOBAL('', MANGLED_GLOBAL_NAMES);
return JsCache.fetch(names, name);
return JS('String|Null', '#', JsCache.fetch(names, name));
}

String unmangleAllIdentifiersIfPreservedAnyways(String str) {
Expand Down
11 changes: 11 additions & 0 deletions sdk/lib/_internal/js_runtime/lib/rti.dart
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,15 @@ import 'dart:_foreign_helper'
JS,
JS_BUILTIN,
JS_EMBEDDED_GLOBAL,
JS_GET_FLAG,
JS_GET_NAME,
JS_STRING_CONCAT,
RAW_DART_FUNCTION_REF;

import 'dart:_interceptors' show JSArray, JSUnmodifiableArray;

import 'dart:_js_names' show unmangleGlobalNameIfPreservedAnyways;

import 'dart:_js_embedded_names'
show JsBuiltin, JsGetName, RtiUniverseFieldNames, RTI_UNIVERSE, TYPES;

Expand Down Expand Up @@ -638,6 +642,7 @@ String _rtiToString(Rti rti, List<String> genericContext) {

if (kind == Rti.kindInterface) {
String name = Rti._getInterfaceName(rti);
name = _unminifyOrTag(name);
var arguments = Rti._getInterfaceTypeArguments(rti);
if (arguments.length != 0) {
name += '<';
Expand Down Expand Up @@ -706,6 +711,12 @@ String _rtiToString(Rti rti, List<String> genericContext) {
return '?';
}

String _unminifyOrTag(String rawClassName) {
String preserved = unmangleGlobalNameIfPreservedAnyways(rawClassName);
if (preserved != null) return preserved;
return JS_GET_FLAG('MINIFIED') ? 'minified:$rawClassName' : rawClassName;
}

String _rtiToDebugString(Rti rti) {
String arrayToString(Object array) {
String s = '[', sep = '';
Expand Down
28 changes: 18 additions & 10 deletions tests/compiler/dart2js_extra/rti/bind_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -11,33 +11,41 @@ void checkRtiIdentical(Object rti1, Object rti2) {
identical(rti1, rti2), 'identical(${format(rti1)}, ${format(rti2)}');
}

void checkToString(String expected, Object rti1) {
String result = rti.testingRtiToString(rti1);
if (expected == result) return;
Expect.equals(expected, result.replaceAll('minified:', ''));
}

test1() {
var universe = rti.testingCreateUniverse();

// Extend environment in one step
var env1a = rti.testingUniverseEval(universe, 'Foo');
var args1 = rti.testingUniverseEval(universe, '@<aa,bb>');
var args1 = rti.testingUniverseEval(universe, '@<aaa,bbb>');
var env1b = rti.testingEnvironmentBind(universe, env1a, args1);

var rti1 = rti.testingEnvironmentEval(universe, env1b, 'A<0,1,2>');
Expect.equals('A<Foo, aa, bb>', rti.testingRtiToString(rti1));
var rti1 = rti.testingEnvironmentEval(universe, env1b, 'AAA<0,1,2>');
checkToString('AAA<Foo, aaa, bbb>', rti1);

Expect.equals('binding(interface("Foo"), [interface("aa"), interface("bb")])',
Expect.equals(
'binding(interface("Foo"), [interface("aaa"), interface("bbb")])',
rti.testingRtiToDebugString(env1b));

// Extend environment in two steps
var env2a = rti.testingUniverseEval(universe, 'Foo');
var args2a = rti.testingUniverseEval(universe, 'aa');
var args2a = rti.testingUniverseEval(universe, 'aaa');
var env2b = rti.testingEnvironmentBind(universe, env2a, args2a);
var args2b = rti.testingUniverseEval(universe, 'bb');
var args2b = rti.testingUniverseEval(universe, 'bbb');
var env2c = rti.testingEnvironmentBind(universe, env2b, args2b);

var rti2 = rti.testingEnvironmentEval(universe, env2c, 'A<0,1,2>');
Expect.equals('A<Foo, aa, bb>', rti.testingRtiToString(rti2));
var rti2 = rti.testingEnvironmentEval(universe, env2c, 'AAA<0,1,2>');
checkToString('AAA<Foo, aaa, bbb>', rti2);

Expect.equals('binding(interface("Foo"), [interface("aa")])',
Expect.equals('binding(interface("Foo"), [interface("aaa")])',
rti.testingRtiToDebugString(env2b));
Expect.equals('binding(interface("Foo"), [interface("aa"), interface("bb")])',
Expect.equals(
'binding(interface("Foo"), [interface("aaa"), interface("bbb")])',
rti.testingRtiToDebugString(env2c));

checkRtiIdentical(env1b, env2c);
Expand Down
45 changes: 25 additions & 20 deletions tests/compiler/dart2js_extra/rti/bound_environment_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -11,19 +11,25 @@ void checkRtiIdentical(Object rti1, Object rti2) {
identical(rti1, rti2), 'identical(${format(rti1)}, ${format(rti2)}');
}

void checkToString(String expected, Object rti1) {
String result = rti.testingRtiToString(rti1);
if (expected == result) return;
Expect.equals(expected, result.replaceAll('minified:', ''));
}

test1() {
var universe = rti.testingCreateUniverse();

var env = rti.testingUniverseEval(universe, 'Foo<bool><int>');
var rti1 = rti.testingUniverseEval(universe, 'int');
var rti2 = rti.testingEnvironmentEval(universe, env, '1');

Expect.equals('int', rti.testingRtiToString(rti1));
Expect.equals('int', rti.testingRtiToString(rti2));
checkToString('int', rti1);
checkToString('int', rti2);
checkRtiIdentical(rti1, rti2);

var rti3 = rti.testingEnvironmentEval(universe, env, 'A<0,1,2>');
Expect.equals('A<Foo<bool>, int, bool>', rti.testingRtiToString(rti3));
var rti3 = rti.testingEnvironmentEval(universe, env, 'AAA<0,1,2>');
checkToString('AAA<Foo<bool>, int, bool>', rti3);
}

test2() {
Expand All @@ -35,34 +41,33 @@ test2() {
var env1 = rti.testingUniverseEval(universe, 'Foo<bool><int>');
var env2 = rti.testingUniverseEval(universe, 'Foo;<bool><int>');

var rti1 = rti.testingEnvironmentEval(universe, env1, 'A<0,1,2>');
var rti2 = rti.testingEnvironmentEval(universe, env2, 'A<0,1,2>');
Expect.equals('A<Foo<bool>, int, bool>', rti.testingRtiToString(rti1));
Expect.equals('A<Foo, bool, int>', rti.testingRtiToString(rti2));
var rti1 = rti.testingEnvironmentEval(universe, env1, 'AAA<0,1,2>');
var rti2 = rti.testingEnvironmentEval(universe, env2, 'AAA<0,1,2>');
checkToString('AAA<Foo<bool>, int, bool>', rti1);
checkToString('AAA<Foo, bool, int>', rti2);
}

test3() {
var universe = rti.testingCreateUniverse();
var env = rti.testingUniverseEval(universe, 'C<aa,bb><cc,@>');
var rti1 = rti.testingEnvironmentEval(universe, env, 'A<0,1,2,3,4>');
Expect.equals(
'A<C<aa, bb>, cc, dynamic, aa, bb>', rti.testingRtiToString(rti1));
var env = rti.testingUniverseEval(universe, 'CCC<aaa,bbb><ccc,@>');
var rti1 = rti.testingEnvironmentEval(universe, env, 'AAA<0,1,2,3,4>');
checkToString('AAA<CCC<aaa, bbb>, ccc, dynamic, aaa, bbb>', rti1);
}

test4() {
var universe = rti.testingCreateUniverse();
var env = rti.testingUniverseEval(universe, '@<aa,bb>');
var rti1 = rti.testingEnvironmentEval(universe, env, 'A<0,1,2>');
Expect.equals('A<dynamic, aa, bb>', rti.testingRtiToString(rti1));
var env = rti.testingUniverseEval(universe, '@<aaa,bbb>');
var rti1 = rti.testingEnvironmentEval(universe, env, 'AAA<0,1,2>');
checkToString('AAA<dynamic, aaa, bbb>', rti1);
}

test5() {
var universe = rti.testingCreateUniverse();
var env1 = rti.testingUniverseEval(universe, '@<aa><bb><cc>');
var env2 = rti.testingUniverseEval(universe, '@;<aa><bb><cc>');
var rti1 = rti.testingEnvironmentEval(universe, env1, 'A<0,1,2,3>');
var rti2 = rti.testingEnvironmentEval(universe, env2, 'A<0,1,2,3>');
Expect.equals('A<dynamic, aa, bb, cc>', rti.testingRtiToString(rti1));
var env1 = rti.testingUniverseEval(universe, '@<aaa><bbb><ccc>');
var env2 = rti.testingUniverseEval(universe, '@;<aaa><bbb><ccc>');
var rti1 = rti.testingEnvironmentEval(universe, env1, 'AAA<0,1,2,3>');
var rti2 = rti.testingEnvironmentEval(universe, env2, 'AAA<0,1,2,3>');
checkToString('AAA<dynamic, aaa, bbb, ccc>', rti1);
checkRtiIdentical(rti1, rti2);
}

Expand Down
16 changes: 11 additions & 5 deletions tests/compiler/dart2js_extra/rti/class_environment_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,21 @@ void checkRtiIdentical(Object rti1, Object rti2) {
identical(rti1, rti2), 'identical(${format(rti1)}, ${format(rti2)}');
}

void checkToString(String expected, Object rti1) {
String result = rti.testingRtiToString(rti1);
if (expected == result) return;
Expect.equals(expected, result.replaceAll('minified:', ''));
}

testInterface1() {
var universe = rti.testingCreateUniverse();

var env = rti.testingUniverseEval(universe, 'Foo<int>');
var rti1 = rti.testingUniverseEval(universe, 'int');
var rti2 = rti.testingEnvironmentEval(universe, env, '1');

Expect.equals('int', rti.testingRtiToString(rti1));
Expect.equals('int', rti.testingRtiToString(rti2));
checkToString('int', rti1);
checkToString('int', rti2);
checkRtiIdentical(rti1, rti2);
}

Expand All @@ -31,9 +37,9 @@ testInterface2() {
var rti2 = rti.testingEnvironmentEval(universe, env, '2');
var rti3 = rti.testingEnvironmentEval(universe, env, 'List<1>');

Expect.equals('List<int>', rti.testingRtiToString(rti1));
Expect.equals('List<int>', rti.testingRtiToString(rti2));
Expect.equals('List<int>', rti.testingRtiToString(rti3));
checkToString('List<int>', rti1);
checkToString('List<int>', rti2);
checkToString('List<int>', rti3);
checkRtiIdentical(rti1, rti2);
checkRtiIdentical(rti1, rti3);
}
Expand Down
24 changes: 15 additions & 9 deletions tests/compiler/dart2js_extra/rti/simple_2_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,12 @@
import 'dart:_rti' as rti;
import "package:expect/expect.dart";

void checkToString(String expected, Object rti1) {
String result = rti.testingRtiToString(rti1);
if (expected == result) return;
Expect.equals(expected, result.replaceAll('minified:', ''));
}

testDynamic1() {
var universe = rti.testingCreateUniverse();

Expand All @@ -13,7 +19,7 @@ testDynamic1() {

Expect.isTrue(identical(rti1, rti2), 'dynamic should be identical');
Expect.isFalse(rti1 is String);
Expect.equals('dynamic', rti.testingRtiToString(rti1));
checkToString('dynamic', rti1);
}

testDynamic2() {
Expand All @@ -24,7 +30,7 @@ testDynamic2() {

Expect.isTrue(identical(rti1, rti2), 'dynamic should be identical');
Expect.isFalse(rti1 is String);
Expect.equals('dynamic', rti.testingRtiToString(rti1));
checkToString('dynamic', rti1);
}

testVoid() {
Expand All @@ -35,7 +41,7 @@ testVoid() {

Expect.isTrue(identical(rti1, rti2), 'void should be identical');
Expect.isFalse(rti1 is String);
Expect.equals('void', rti.testingRtiToString(rti1));
checkToString('void', rti1);
}

testNever() {
Expand All @@ -46,7 +52,7 @@ testNever() {

Expect.isTrue(identical(rti1, rti2), 'Never should be identical');
Expect.isFalse(rti1 is String);
Expect.equals('Never', rti.testingRtiToString(rti1));
checkToString('Never', rti1);
}

testAny() {
Expand All @@ -57,7 +63,7 @@ testAny() {

Expect.isTrue(identical(rti1, rti2), "'any' should be identical");
Expect.isFalse(rti1 is String);
Expect.equals('any', rti.testingRtiToString(rti1));
checkToString('any', rti1);
}

testTerminal() {
Expand All @@ -84,7 +90,7 @@ testInterface1() {

Expect.isTrue(identical(rti1, rti2));
Expect.isFalse(rti1 is String);
Expect.equals('int', rti.testingRtiToString(rti1));
checkToString('int', rti1);
}

testInterface2() {
Expand All @@ -95,7 +101,7 @@ testInterface2() {

Expect.isTrue(identical(rti1, rti2));
Expect.isFalse(rti1 is String);
Expect.equals('Foo<int, bool>', rti.testingRtiToString(rti1));
checkToString('Foo<int, bool>', rti1);
}

testInterface3() {
Expand All @@ -106,7 +112,7 @@ testInterface3() {

Expect.isTrue(identical(rti1, rti2));
Expect.isFalse(rti1 is String);
Expect.equals('Foo<Bar<int>, Bar<bool>>', rti.testingRtiToString(rti1));
checkToString('Foo<Bar<int>, Bar<bool>>', rti1);
}

testInterface4() {
Expand All @@ -117,7 +123,7 @@ testInterface4() {

Expect.isTrue(identical(rti1, rti2));
Expect.isFalse(rti1 is String);
Expect.equals('Foo<Foo<Foo<Foo<int>>>>', rti.testingRtiToString(rti1));
checkToString('Foo<Foo<Foo<Foo<int>>>>', rti1);
}

main() {
Expand Down

0 comments on commit 6ff3212

Please sign in to comment.