def InitCommandEvaluator(parse_ctx=None, comp_lookup=None, arena=None, mem=None, aliases=None, ext_prog=None): opt0_array = state.InitOpts() opt_stacks = [None] * option_i.ARRAY_SIZE if parse_ctx: arena = parse_ctx.arena parse_opts = parse_ctx.parse_opts else: parse_ctx = InitParseContext() mem = mem or state.Mem('', [], arena, []) exec_opts = optview.Exec(opt0_array, opt_stacks) mutable_opts = state.MutableOpts(mem, opt0_array, opt_stacks, None) mem.exec_opts = exec_opts state.InitMem(mem, {}, '0.1') mutable_opts.Init() # No 'readline' in the tests. errfmt = ui.ErrorFormatter(arena) job_state = process.JobState() fd_state = process.FdState(errfmt, job_state) aliases = {} if aliases is None else aliases procs = {} compopt_state = completion.OptionState() comp_lookup = comp_lookup or completion.Lookup() readline = None # simulate not having it new_var = builtin_assign.NewVar(mem, procs, errfmt) assign_builtins = { builtin_i.declare: new_var, builtin_i.typeset: new_var, builtin_i.local: new_var, builtin_i.export_: builtin_assign.Export(mem, errfmt), builtin_i.readonly: builtin_assign.Readonly(mem, errfmt), } builtins = { # Lookup builtin_i.echo: builtin_pure.Echo(exec_opts), builtin_i.shift: builtin_assign.Shift(mem), builtin_i.history: builtin_lib.History(readline, mylib.Stdout()), builtin_i.compopt: builtin_comp.CompOpt(compopt_state, errfmt), builtin_i.compadjust: builtin_comp.CompAdjust(mem), builtin_i.alias: builtin_pure.Alias(aliases, errfmt), builtin_i.unalias: builtin_pure.UnAlias(aliases, errfmt), } debug_f = util.DebugFile(sys.stderr) cmd_deps = cmd_eval.Deps() cmd_deps.mutable_opts = mutable_opts cmd_deps.trap_nodes = [] search_path = state.SearchPath(mem) waiter = process.Waiter(job_state, exec_opts) ext_prog = \ ext_prog or process.ExternalProgram('', fd_state, errfmt, debug_f) cmd_deps.dumper = dev.CrashDumper('') cmd_deps.debug_f = debug_f splitter = split.SplitContext(mem) arith_ev = sh_expr_eval.ArithEvaluator(mem, exec_opts, parse_ctx, errfmt) bool_ev = sh_expr_eval.BoolEvaluator(mem, exec_opts, parse_ctx, errfmt) expr_ev = expr_eval.OilEvaluator(mem, procs, splitter, errfmt) word_ev = word_eval.NormalWordEvaluator(mem, exec_opts, mutable_opts, splitter, errfmt) cmd_ev = cmd_eval.CommandEvaluator(mem, exec_opts, errfmt, procs, assign_builtins, arena, cmd_deps) shell_ex = executor.ShellExecutor( mem, exec_opts, mutable_opts, procs, builtins, search_path, ext_prog, waiter, job_state, fd_state, errfmt) assert cmd_ev.mutable_opts is not None, cmd_ev prompt_ev = prompt.Evaluator('osh', parse_ctx, mem) tracer = dev.Tracer(parse_ctx, exec_opts, mutable_opts, mem, word_ev, debug_f) vm.InitCircularDeps(arith_ev, bool_ev, expr_ev, word_ev, cmd_ev, shell_ex, prompt_ev, tracer) spec_builder = builtin_comp.SpecBuilder(cmd_ev, parse_ctx, word_ev, splitter, comp_lookup) # Add some builtins that depend on the executor! complete_builtin = builtin_comp.Complete(spec_builder, comp_lookup) builtins[builtin_i.complete] = complete_builtin builtins[builtin_i.compgen] = builtin_comp.CompGen(spec_builder) return cmd_ev
def Banner(msg): print('-' * 60) print(msg) # TODO: Put these all in a function. _ARENA = test_lib.MakeArena('process_test.py') _MEM = state.Mem('', [], _ARENA, []) state.InitMem(_MEM, {}, '0.1') _OPT_ARRAY = [False] * option_i.ARRAY_SIZE _PARSE_OPTS = optview.Parse(_OPT_ARRAY) _ERREXIT = state._ErrExit() _EXEC_OPTS = state.MutableOpts(_MEM, _OPT_ARRAY, _ERREXIT, None) _JOB_STATE = process.JobState() _WAITER = process.Waiter(_JOB_STATE, _EXEC_OPTS) _ERRFMT = ui.ErrorFormatter(_ARENA) _FD_STATE = process.FdState(_ERRFMT, _JOB_STATE) _EXT_PROG = process.ExternalProgram('', _FD_STATE, _ERRFMT, util.NullDebugFile()) def _CommandNode(code_str, arena): c_parser = test_lib.InitCommandParser(code_str, arena=arena) return c_parser.ParseLogicalLine() def _ExtProc(argv): arg_vec = cmd_value.Argv(argv, [0] * len(argv))
def Banner(msg): print('-' * 60) print(msg) # TODO: Put these all in a function. _ARENA = test_lib.MakeArena('process_test.py') _MEM = state.Mem('', [], _ARENA, []) state.InitMem(_MEM, {}, '0.1') _OPT0_ARRAY = [False] * option_i.ARRAY_SIZE _OPT_STACKS = [False] * option_i.ARRAY_SIZE _PARSE_OPTS = optview.Parse(_OPT0_ARRAY, _OPT_STACKS) _EXEC_OPTS = state.MutableOpts(_MEM, _OPT0_ARRAY, _OPT_STACKS, None) _JOB_STATE = process.JobState() _WAITER = process.Waiter(_JOB_STATE, _EXEC_OPTS) _ERRFMT = ui.ErrorFormatter(_ARENA) _FD_STATE = process.FdState(_ERRFMT, _JOB_STATE) _EXT_PROG = process.ExternalProgram('', _FD_STATE, _ERRFMT, util.NullDebugFile()) def _CommandNode(code_str, arena): c_parser = test_lib.InitCommandParser(code_str, arena=arena) return c_parser.ParseLogicalLine() def _ExtProc(argv): arg_vec = cmd_value.Argv(argv, [0] * len(argv))