Skip to content

Commit 5013b28

Browse files
Jenny Messerlycommit-bot@chromium.org
Jenny Messerly
authored andcommitted
fix #31999, remove fuzzy arrow runtime support from DDC
Also updates tests that relied on fuzzy arrows. Change-Id: Ia8df1d8d421e43dfada589223d5e46182b92fa67 Reviewed-on: https://dart-review.googlesource.com/37425 Commit-Queue: Jenny Messerly <[email protected]> Reviewed-by: Leaf Petersen <[email protected]>
1 parent 4aa55f0 commit 5013b28

File tree

49 files changed

+390
-366
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

49 files changed

+390
-366
lines changed

pkg/dev_compiler/lib/src/analyzer/code_generator.dart

Lines changed: 12 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -2142,8 +2142,7 @@ class CodeGenerator extends Object
21422142
var type = _emitAnnotatedFunctionType(
21432143
reifiedType, annotationNode?.metadata,
21442144
parameters: annotationNode?.parameters?.parameters,
2145-
nameType: false,
2146-
definite: true);
2145+
nameType: false);
21472146
var property = new JS.Property(_declareMemberName(method), type);
21482147
if (method.isStatic) {
21492148
staticMethods.add(property);
@@ -2205,8 +2204,7 @@ class CodeGenerator extends Object
22052204
var type = _emitAnnotatedFunctionType(
22062205
reifiedType, annotationNode?.metadata,
22072206
parameters: annotationNode?.parameters?.parameters,
2208-
nameType: false,
2209-
definite: true);
2207+
nameType: false);
22102208

22112209
var property = new JS.Property(_declareMemberName(accessor), type);
22122210
if (isStatic) {
@@ -2262,8 +2260,7 @@ class CodeGenerator extends Object
22622260
var type = _emitAnnotatedFunctionType(
22632261
ctor.type, annotationNode?.metadata,
22642262
parameters: annotationNode?.parameters?.parameters,
2265-
nameType: false,
2266-
definite: true);
2263+
nameType: false);
22672264
constructors.add(new JS.Property(memberName, type));
22682265
}
22692266
}
@@ -2743,12 +2740,8 @@ class CodeGenerator extends Object
27432740
JS.Expression _emitFunctionTagged(JS.Expression fn, DartType type,
27442741
{topLevel: false}) {
27452742
var lazy = topLevel && !_typeIsLoaded(type);
2746-
var typeRep = _emitFunctionType(type, definite: true);
2747-
if (lazy) {
2748-
return _callHelper('lazyFn(#, () => #)', [fn, typeRep]);
2749-
} else {
2750-
return _callHelper('fn(#, #)', [fn, typeRep]);
2751-
}
2743+
var typeRep = _emitFunctionType(type);
2744+
return _callHelper(lazy ? 'lazyFn(#, () => #)' : 'fn(#, #)', [fn, typeRep]);
27522745
}
27532746

27542747
/// Emits an arrow FunctionExpression node.
@@ -3210,9 +3203,7 @@ class CodeGenerator extends Object
32103203
/// Emit the pieces of a function type, as an array of return type,
32113204
/// regular args, and optional/named args.
32123205
JS.Expression _emitFunctionType(FunctionType type,
3213-
{List<FormalParameter> parameters,
3214-
bool nameType: true,
3215-
definite: false}) {
3206+
{List<FormalParameter> parameters, bool nameType: true}) {
32163207
var parameterTypes = type.normalParameterTypes;
32173208
var optionalTypes = type.optionalParameterTypes;
32183209
var namedTypes = type.namedParameterTypes;
@@ -3251,27 +3242,25 @@ class CodeGenerator extends Object
32513242

32523243
typeParts = [addTypeFormalsAsParameters(typeParts)];
32533244

3254-
helperCall = definite ? 'gFnType(#)' : 'gFnTypeFuzzy(#)';
3245+
helperCall = 'gFnType(#)';
32553246
// If any explicit bounds were passed, emit them.
32563247
if (typeFormals.any((t) => t.bound != null)) {
32573248
var bounds = typeFormals.map((t) => _emitType(t.type.bound)).toList();
32583249
typeParts.add(addTypeFormalsAsParameters(bounds));
32593250
}
32603251
} else {
3261-
helperCall = definite ? 'fnType(#)' : 'fnTypeFuzzy(#)';
3252+
helperCall = 'fnType(#)';
32623253
}
32633254
fullType = _callHelper(helperCall, [typeParts]);
32643255
if (!nameType) return fullType;
3265-
return _typeTable.nameType(type, fullType, definite: definite);
3256+
return _typeTable.nameType(type, fullType);
32663257
}
32673258

32683259
JS.Expression _emitAnnotatedFunctionType(
32693260
FunctionType type, List<Annotation> metadata,
3270-
{List<FormalParameter> parameters,
3271-
bool nameType: true,
3272-
bool definite: false}) {
3273-
var result = _emitFunctionType(type,
3274-
parameters: parameters, nameType: nameType, definite: definite);
3261+
{List<FormalParameter> parameters, bool nameType: true}) {
3262+
var result =
3263+
_emitFunctionType(type, parameters: parameters, nameType: nameType);
32753264
return _emitAnnotatedResult(result, metadata);
32763265
}
32773266

pkg/dev_compiler/lib/src/compiler/type_utilities.dart

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -158,27 +158,20 @@ class TypeTable {
158158
/// Generator variable names for hoisted types.
159159
final _GeneratorTable _generators;
160160

161-
/// Generator variable names for hoisted definite function types.
162-
final _GeneratorTable _definiteGenerators;
163-
164161
/// Mapping from type parameters to the types which must have their
165162
/// cache/generator variables discharged at the binding site for the
166163
/// type variable since the type definition depends on the type
167164
/// parameter.
168165
final _scopeDependencies = <TypeParameterElement, List<DartType>>{};
169166

170-
TypeTable(JS.Identifier runtime)
171-
: _generators = new _GeneratorTable(runtime),
172-
_definiteGenerators = new _GeneratorTable(runtime);
167+
TypeTable(JS.Identifier runtime) : _generators = new _GeneratorTable(runtime);
173168

174169
/// Emit a list of statements declaring the cache variables and generator
175170
/// definitions tracked by the table. If [formals] is present, only
176171
/// emit the definitions which depend on the formals.
177172
List<JS.Statement> discharge([List<TypeParameterElement> formals]) {
178173
var filter = formals?.expand((p) => _scopeDependencies[p] ?? <DartType>[]);
179-
var stmts = [_generators, _definiteGenerators]
180-
.expand((c) => c.discharge(filter))
181-
.toList();
174+
var stmts = [_generators].expand((c) => c.discharge(filter)).toList();
182175
formals?.forEach(_scopeDependencies.remove);
183176
return stmts;
184177
}
@@ -226,9 +219,8 @@ class TypeTable {
226219
/// The boolean parameter [definite] distinguishes between definite function
227220
/// types and other types (since the same DartType may have different
228221
/// representations as definite and indefinite function types).
229-
JS.Expression nameType(DartType type, JS.Expression typeRep,
230-
{bool definite: false}) {
231-
var table = definite ? _definiteGenerators : _generators;
222+
JS.Expression nameType(DartType type, JS.Expression typeRep) {
223+
var table = _generators;
232224
if (!table.isNamed(type)) {
233225
if (recordScopeDependencies(type)) return typeRep;
234226
}

pkg/dev_compiler/tool/ddw

Lines changed: 70 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,58 @@
11
#!/bin/bash
22
#
3-
# Compiles code with DDC and runs the resulting code in node.js with devtool,
4-
# an Electron-based debugger and browser environment.
3+
# Compiles code with DDC and runs the resulting code in node.js.
54
#
65
# The first script supplied should be the one with `main()`.
76
#
87
# Saves the output in the same directory as the sources for convenient
98
# inspection, modification or rerunning the code.
109
set -e
1110

12-
DDC_PATH=$( cd $( dirname "${BASH_SOURCE[0]}" )/.. && pwd )
11+
function follow_links() {
12+
file="$1"
13+
while [ -h "$file" ]; do
14+
file="$(readlink "$file")"
15+
done
16+
echo "$file"
17+
}
18+
PROG_NAME="$(follow_links "$BASH_SOURCE")"
19+
SDK_DIR="$( cd "${PROG_NAME%/*}/../../.."; pwd -P)"
20+
21+
if [[ `uname` == 'Darwin' ]];
22+
then
23+
OUT_DIR="$SDK_DIR"/xcodebuild
24+
else
25+
OUT_DIR="$SDK_DIR"/out
26+
fi
27+
28+
if [ -z "$DART_CONFIGURATION" ];
29+
then
30+
DIRS=$( ls "$OUT_DIR" )
31+
# list of possible configurations in decreasing desirability
32+
CONFIGS=("ReleaseX64" "ReleaseIA32" "DebugX64" "DebugIA32"
33+
"ReleaseARM" "ReleaseARM64" "ReleaseARMV5TE"
34+
"DebugARM" "DebugARM64" "DebugARMV5TE")
35+
DART_CONFIGURATION="None"
36+
for CONFIG in ${CONFIGS[*]}
37+
do
38+
for DIR in $DIRS;
39+
do
40+
if [ "$CONFIG" = "$DIR" ];
41+
then
42+
# choose most desirable configuration that is available and break
43+
DART_CONFIGURATION="$DIR"
44+
break 2
45+
fi
46+
done
47+
done
48+
if [ "$DART_CONFIGURATION" = "None" ]
49+
then
50+
echo "No valid dart configuration found in $OUT_DIR"
51+
exit 1
52+
fi
53+
fi
54+
55+
GEN_DIR="$OUT_DIR"/"$DART_CONFIGURATION"/gen/utils/dartdevc
1356

1457
KERNEL=false
1558
if [ "$1" = "-k" ]; then
@@ -20,21 +63,31 @@ fi
2063
BASENAME=$( basename "${1%.*}")
2164
LIBROOT=$(cd $( dirname "${1%.*}") && pwd)
2265

23-
# TODO(vsm): Change this to use the regular built version of the summaries
24-
# and the SDK.
25-
export NODE_PATH=$DDC_PATH/gen/sdk/common:$LIBROOT:$NODE_PATH
26-
27-
# Build the SDK in a place where we can find it if it's not already there.
28-
if [ ! -e $DDC_PATH/gen/sdk/ddc_sdk.sum ]; then
29-
$DDC_PATH/tool/build_sdk.sh
30-
fi
66+
export NODE_PATH=$GEN_DIR/js/common:$LIBROOT:$NODE_PATH
3167

3268
if [ "$KERNEL" = true ]; then
33-
dart -c $DDC_PATH/bin/dartdevk.dart --modules=node \
34-
-o $BASENAME.js $*
69+
70+
if [ ! -e $GEN_DIR/kernel/ddc_sdk.dill ]; then
71+
echo "DDC SDK must be built first, please run:"
72+
echo " pushd $SDKDIR"
73+
echo " ./tools/build.py -m release dartdevc_sdk_kernel_summary"
74+
exit 1
75+
fi
76+
77+
dart -c $SDK_DIR/pkg/dev_compiler/bin/dartdevk.dart --modules=node \
78+
--dart-sdk-summary=$GEN_DIR/kernel/ddc_sdk.dill \
79+
-o $LIBROOT/$BASENAME.js $*
3580
else
36-
dart -c $DDC_PATH/bin/dartdevc.dart --modules=node --library-root=$LIBROOT \
37-
--dart-sdk-summary=$DDC_PATH/gen/sdk/ddc_sdk.sum \
81+
82+
if [ ! -e $GEN_DIR/ddc_sdk.sum ]; then
83+
echo "DDC SDK must be built first, please run:"
84+
echo " pushd $SDKDIR"
85+
echo " ./tools/build.py -m release dartdevc_sdk"
86+
exit 1
87+
fi
88+
89+
dart -c $SDK_DIR/pkg/dev_compiler/bin/dartdevc.dart --modules=node \
90+
--library-root=$LIBROOT --dart-sdk-summary=$GEN_DIR/ddc_sdk.sum \
3891
-o $LIBROOT/$BASENAME.js $*
3992
fi
4093

@@ -45,14 +98,15 @@ echo "
4598
const originalResolveFilename = Module._resolveFilename;
4699
Module._resolveFilename = function (request, parent, isMain) {
47100
let paths = parent.paths;
48-
const ddcPath = \"$DDC_PATH/gen/sdk/common\";
101+
const ddcPath = \"$GEN_DIR/js/common\";
49102
if (paths[0] != ddcPath) {
50103
paths.splice(0, 0, ddcPath, \"$LIBROOT\");
51104
}
52105
return originalResolveFilename(request, parent, isMain);
53106
};
54107
let sdk = require(\"dart_sdk\");
55108
let main = require(\"$BASENAME\").$BASENAME.main;
109+
sdk.dart.ignoreWhitelistedErrors(false);
56110
sdk._isolate_helper.startRootIsolate(main, []);" \
57111
> $LIBROOT/$BASENAME.run.js
58112
devtool $LIBROOT/$BASENAME.run.js

pkg/dev_compiler/tool/input_sdk/lib/js/dart2js/js_dart2js.dart

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,6 @@ library dart.js;
8989

9090
import 'dart:collection' show HashMap, ListMixin;
9191

92-
import 'dart:_interceptors' as _interceptors show JSArray;
9392
import 'dart:_js_helper' show Primitives;
9493
import 'dart:_foreign_helper' show JS;
9594

pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/runtime.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@ import 'dart:_js_helper'
2525
JsLinkedHashMap,
2626
ImmutableMap,
2727
PrivateSymbol,
28-
ReifyFunctionTypes;
28+
ReifyFunctionTypes,
29+
NoReifyGeneric;
2930
import 'dart:_debugger' show trackCall;
3031

3132
export 'dart:_debugger'

0 commit comments

Comments
 (0)