///|
#cfg(target="js")
fn cli_args() -> Array[String] {
  let args = @env.args()
  if args.is_empty() {
    []
  } else {
    args[1:].to_owned()
  }
}

///|
#cfg(not(target="js"))
fn cli_args() -> Array[String] {
  @env.args()
}

///|
fn main {
  let args = cli_args()
  match @cli.parse_cli_args(args) {
    Err(msg) => {
      println("starlark: \{msg}")
      @sys.exit(2)
    }
    Ok((filepath, expr, opts)) => {
      let exit_code = match (expr, filepath) {
        (Some(e), _) => @cli.run_expr(e, opts)
        (None, Some(fp)) => @cli.run_file(fp, opts)
        (None, None) => @cli.run_repl(opts)
      }
      if exit_code != 0 {
        @sys.exit(exit_code)
      }
    }
  }
}