7651177cf1
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>
123 lines
3.1 KiB
Bash
Executable File
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
|