#!/bin/bash
# Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
# for details. All rights reserved. Use of this source code is governed by a
# BSD-style license that can be found in the LICENSE file.

# There is a cfe.dart script in the same directory as this script. Prefer
# to use that since it is a Dart script and can be run in any environment.

set -e

REPO_DIR="$(cd ${BASH_SOURCE%/*} && git rev-parse --show-toplevel)"

DART_VM=${DART_VM-"${REPO_DIR}/sdk/bin/dart"}

TOOL_DIR="${REPO_DIR}/pkg/front_end/tool"

KERNEL_BIN="${REPO_DIR}/pkg/kernel/bin"

function stop {
  echo "$@" >&2
  exit 2
}

EXTRA_VM_ARGS=()

while [[ "$1" == -* ]]; do
  EXTRA_VM_ARGS+=("$1")
  shift
done

case "${1//_/-}" in
  abcompile) SCRIPT="${TOOL_DIR}/abcompile.dart";;
  compile) SCRIPT="${TOOL_DIR}/compile.dart";;
  compile-platform) SCRIPT="${TOOL_DIR}/compile_platform.dart";;
  log) SCRIPT="${TOOL_DIR}/log_analyzer.dart";;
  logd) SCRIPT="${TOOL_DIR}/log_collector.dart";;
  outline) SCRIPT="${TOOL_DIR}/outline.dart";;
  parser) SCRIPT="${TOOL_DIR}/parser.dart";;
  scanner) SCRIPT="${TOOL_DIR}/scanner.dart";;
  dump-ir)
    SCRIPT="${KERNEL_BIN}/dump.dart"
    if [ "$#" = "2" ]; then
      # Write to stdout if no target is given.
      set -- "$@" /dev/fd/1
    fi
    if [ "$#" != "3" ]; then
      stop "Usage: $1 dillFile [output]"
    fi
    ;;
  testing)
    SCRIPT="${REPO_DIR}/pkg/testing/bin/testing.dart"
    set -- "$@" "--config=${REPO_DIR}/pkg/front_end/testing.json"
    ;;
  generate-messages) SCRIPT="${TOOL_DIR}/generate_messages.dart";;
  generate-experimental-flags) SCRIPT="${TOOL_DIR}/generate_experimental_flags.dart";;
  *)
    stop "'$1' isn't a valid subcommand."
    ;;
esac

shift

exec "${DART_VM}" "${EXTRA_VM_ARGS[@]}" --enable-asserts "${SCRIPT}" "$@"
