Files
sdk/pkg/dev_compiler/tool/ddc
T
Jenny Messerly 7651177cf1 fix #33684, "not a function" JS TypeError usually means nSM
Improves the error message when calling a null function, by suggesting
to the user that null may be the problem. Also prefixes the errors with
'NoSuchMethodError' to match Dart user expectations (the Dart type that
users can catch is indeed NoSuchMethodError).

Change-Id: Ia9bca5bc2a3e33e83f0c3728b48f7b17f98dcc6a
Reviewed-on: https://dart-review.googlesource.com/66228
Commit-Queue: Jenny Messerly <jmesserly@google.com>
Reviewed-by: Bob Nystrom <rnystrom@google.com>
2018-07-27 00:13:00 +00:00

123 lines
3.1 KiB
Bash
Executable File

#!/bin/bash
#
# Compiles code with DDC and runs the resulting code in node.js.
#
# The first script supplied should be the one with `main()`.
#
# Saves the output in the same directory as the sources for convenient
# inspection, modification or rerunning the code.
set -e
function follow_links() {
file="$1"
while [ -h "$file" ]; do
file="$(readlink "$file")"
done
echo "$file"
}
PROG_NAME="$(follow_links "$BASH_SOURCE")"
SDK_DIR="$( cd "${PROG_NAME%/*}/../../.."; pwd -P)"
if [[ `uname` == 'Darwin' ]];
then
OUT_DIR="$SDK_DIR"/xcodebuild
else
OUT_DIR="$SDK_DIR"/out
fi
if [ -z "$DART_CONFIGURATION" ];
then
DIRS=$( ls "$OUT_DIR" )
# list of possible configurations in decreasing desirability
CONFIGS=("ReleaseX64" "ReleaseIA32" "DebugX64" "DebugIA32"
"ReleaseARM" "ReleaseARM64" "ReleaseARMV5TE"
"DebugARM" "DebugARM64" "DebugARMV5TE")
DART_CONFIGURATION="None"
for CONFIG in ${CONFIGS[*]}
do
for DIR in $DIRS;
do
if [ "$CONFIG" = "$DIR" ];
then
# choose most desirable configuration that is available and break
DART_CONFIGURATION="$DIR"
break 2
fi
done
done
if [ "$DART_CONFIGURATION" = "None" ]
then
echo "No valid dart configuration found in $OUT_DIR"
exit 1
fi
fi
GEN_DIR="$OUT_DIR"/"$DART_CONFIGURATION"/gen/utils/dartdevc
KERNEL=false
if [ "$1" = "-k" ]; then
KERNEL=true
shift
fi
BASENAME=$( basename "${1%.*}")
LIBROOT=$(cd $( dirname "${1%.*}") && pwd)
if [ "$KERNEL" = true ]; then
if [ ! -e $GEN_DIR/kernel/ddc_sdk.dill ]; then
echo "DDC SDK must be built first, please run:"
echo " pushd $SDKDIR"
echo " ./tools/build.py -m release dartdevk_sdk"
exit 1
fi
NODE_PATH=$GEN_DIR/kernel/common:$LIBROOT:$NODE_PATH
$SDK_DIR/sdk/bin/dartdevk --modules=node \
--dart-sdk-summary=$GEN_DIR/kernel/ddc_sdk.dill \
-o $LIBROOT/$BASENAME.js $*
else
if [ ! -e $GEN_DIR/ddc_sdk.sum ]; then
echo "DDC SDK must be built first, please run:"
echo " pushd $SDKDIR"
echo " ./tools/build.py -m release dartdevc_sdk"
exit 1
fi
NODE_PATH=$GEN_DIR/js/common:$LIBROOT:$NODE_PATH
$SDK_DIR/sdk/bin/dartdevc --modules=node \
--library-root=$LIBROOT --dart-sdk-summary=$GEN_DIR/ddc_sdk.sum \
-o $LIBROOT/$BASENAME.js $*
fi
export NODE_PATH
pushd $LIBROOT > /dev/null
# TODO(jmesserly): we could have this output the same content as the devtool
# script, so you could debug the output without recompiling?
echo "
let source_maps;
try {
source_maps = require('source-map-support');
source_maps.install();
} catch(e) {
}
let sdk = require(\"dart_sdk\");
let main = require(\"./$BASENAME\").$BASENAME.main;
sdk.dart.ignoreWhitelistedErrors(false);
try {
sdk._isolate_helper.startRootIsolate(main, []);
} catch(e) {
if (!source_maps) {
console.log('For Dart source maps: npm install source-map-support');
}
let toString = sdk.dart.toString;
console.error(toString(e), toString(sdk.dart.stackTrace(e)));
process.exit(1);
}" \
> $LIBROOT/$BASENAME.run.js
node $BASENAME.run.js || exit 1
popd > /dev/null