| #!/bin/bash | |
| # | |
| # Compiles code with DDC and runs the resulting code in d8 (the v8 command | |
| # line tool). Only recent versions of v8/d8 that include es6 modules are | |
| # supported. | |
| # | |
| # 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. | |
| # | |
| # TODO(vsm): Investigate what polyfills from dart2js would be useful here: | |
| # sdk/lib/_internal/js_runtime/lib/preambles/d8.js | |
| # | |
| D8=$(type -P d8) | |
| if [ ! $D8 ]; then | |
| echo "Please add d8 to your PATH." | |
| exit 1 | |
| fi | |
| set -e | |
| DDC_PATH=$( cd $( dirname "${BASH_SOURCE[0]}" )/.. && pwd ) | |
| BASENAME=$( basename "${1%.*}") | |
| LIBROOT=$(cd $( dirname "${1%.*}") && pwd) | |
| # Build the SDK in a place where we can find it if it's not already there. | |
| if [ ! -e gen/sdk/ddc_sdk.sum ]; then | |
| ./tool/build_sdk.sh | |
| fi | |
| # D8 uses relative paths. That won't work for the sdk right now as the | |
| # summary is in a slightly different location. | |
| # D8/ES6 imports also do not add a ".js" extension, so this is "dart_sdk" | |
| # instead of "dart_sdk.js". | |
| if [ ! -f dart_sdk ]; then | |
| ln -s $DDC_PATH/gen/sdk/es6/dart_sdk.js dart_sdk | |
| fi | |
| dart -c $DDC_PATH/bin/dartdevc.dart --modules=es6 --library-root=$LIBROOT \ | |
| --dart-sdk-summary=$DDC_PATH/gen/sdk/ddc_sdk.sum \ | |
| -o $LIBROOT/$BASENAME.js $* | |
| pushd $LIBROOT > /dev/null | |
| echo " | |
| import { dart, _isolate_helper } from 'dart_sdk'; | |
| import { $BASENAME } from '$BASENAME.js'; | |
| let main = $BASENAME.main; | |
| dart.ignoreWhitelistedErrors(false); | |
| try { | |
| _isolate_helper.startRootIsolate(() => {}, []); | |
| main(); | |
| } catch(e) { | |
| console.error(e.toString(), dart.stackTrace(e).toString()); | |
| }" \ | |
| > $LIBROOT/$BASENAME.d8.js | |
| $D8 --module $BASENAME.d8.js || exit 1 | |
| popd > /dev/null |