Skip to content

Commit

Permalink
[translation] Fix conflict with --extern flag and C++ extern keyword
Browse files Browse the repository at this point in the history
Rename me -> self_val
  • Loading branch information
Andy C committed Sep 29, 2024
1 parent b872fc7 commit 43ad0f2
Show file tree
Hide file tree
Showing 6 changed files with 26 additions and 18 deletions.
1 change: 1 addition & 0 deletions builtin/meta_osh.py
Original file line number Diff line number Diff line change
Expand Up @@ -410,6 +410,7 @@ class Invoke(vm._Builtin):
invoke --builtin
invoke --builtin true
"""

def __init__(self, shell_ex, procs, errfmt):
# type: (vm._Executor, state.Procs, ui.ErrorFormatter) -> None
self.shell_ex = shell_ex
Expand Down
8 changes: 3 additions & 5 deletions frontend/flag_def.py
Original file line number Diff line number Diff line change
Expand Up @@ -468,11 +468,9 @@ def _DefineCompletionActions(spec):
RUNPROC_SPEC.ShortFlag('-h', args.Bool, help='Show all procs')

INVOKE_SPEC = FlagSpec('invoke')

# 3 coarse-grained categories.
INVOKE_SPEC.LongFlag('--builtin') # like 'builtin', which includs special builtins
INVOKE_SPEC.LongFlag('--proc-like') # like 'runproc' - proc, sh func, or invokable obj
INVOKE_SPEC.LongFlag('--extern') # like 'extern' builtin
INVOKE_SPEC.LongFlag('--builtin') # like 'builtin'
INVOKE_SPEC.LongFlag('--proc-like') # like 'runproc'
INVOKE_SPEC.LongFlag('--extern') # like 'extern'

EXTERN_SPEC = FlagSpec('extern')

Expand Down
14 changes: 11 additions & 3 deletions frontend/flag_gen.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#!/usr/bin/env python2
"""Flag_gen.py."""
""" flag_gen.py - generate Python and C++ from flag specs """
from __future__ import print_function

import itertools
Expand Down Expand Up @@ -32,6 +32,14 @@ def CString(s):
return '"%s"' % s


def _CleanFieldName(name):
# Avoid C++ keyword for invoke --extern
if name == 'extern':
return 'extern_'

return name.replace('-', '_')


def _WriteStrArray(f, var_name, a):
c_strs = ', '.join(CString(s) for s in sorted(a))
f.write('const char* %s[] = {%s, nullptr};\n' % (var_name, c_strs))
Expand Down Expand Up @@ -206,7 +214,7 @@ def Cpp(specs, header_f, cc_f):
bits = []
for field_name in sorted(spec.fields):
typ = spec.fields[field_name]
field_name = field_name.replace('-', '_')
field_name = _CleanFieldName(field_name)
field_names.append(field_name)

with switch(typ) as case:
Expand Down Expand Up @@ -485,7 +493,7 @@ def __init__(self, attrs):
i = 0
for field_name in sorted(spec.fields):
typ = spec.fields[field_name]
field_name = field_name.replace('-', '_')
field_name = _CleanFieldName(field_name)

with switch(typ) as case:
if case(flag_type_e.Bool):
Expand Down
6 changes: 3 additions & 3 deletions osh/cmd_eval.py
Original file line number Diff line number Diff line change
Expand Up @@ -2207,8 +2207,8 @@ def _MaybeRunErrTrap(self):
with state.ctx_ErrTrap(self.mem):
self._Execute(node)

def RunProc(self, proc, cmd_val):
# type: (value.Proc, cmd_value.Argv) -> int
def RunProc(self, proc, cmd_val, self_val=None):
# type: (value.Proc, cmd_value.Argv, value_t) -> int
"""Run procs aka "shell functions".
For SimpleCommand and registered completion hooks.
Expand All @@ -2222,7 +2222,7 @@ def RunProc(self, proc, cmd_val):

# Hm this sets "$@". TODO: Set ARGV only
with state.ctx_ProcCall(self.mem, self.mutable_opts, proc, proc_argv):
func_proc.BindProcArgs(proc, cmd_val, self.mem)
func_proc.BindProcArgs(proc, cmd_val, self.mem, self_val=self_val)

# Redirects still valid for functions.
# Here doc causes a pipe and Process(SubProgramThunk).
Expand Down
2 changes: 1 addition & 1 deletion ysh/expr_eval.py
Original file line number Diff line number Diff line change
Expand Up @@ -863,7 +863,7 @@ def _EvalFuncCall(self, node):
to_call = func.func
pos_args, named_args = func_proc._EvalArgList(self,
node.args,
me=func.me)
self_val=func.me)
rd = typed_args.Reader(pos_args,
named_args,
None,
Expand Down
13 changes: 7 additions & 6 deletions ysh/func_proc.py
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,7 @@ def _EvalNamedArgs(expr_ev, named_exprs):
def _EvalArgList(
expr_ev, # type: expr_eval.ExprEvaluator
args, # type: ArgList
me=None # type: Optional[value_t]
self_val=None # type: Optional[value_t]
):
# type: (...) -> Tuple[List[value_t], Optional[Dict[str, value_t]]]
"""Evaluate arg list for funcs.
Expand All @@ -195,8 +195,8 @@ def _EvalArgList(
"""
pos_args = [] # type: List[value_t]

if me: # self/this argument
pos_args.append(me)
if self_val: # self/this argument
pos_args.append(self_val)

_EvalPosArgs(expr_ev, args.pos_args, pos_args)

Expand Down Expand Up @@ -451,8 +451,8 @@ def _BindFuncArgs(func, rd, mem):
(func.name, num_named), blame_loc)


def BindProcArgs(proc, cmd_val, mem):
# type: (value.Proc, cmd_value.Argv, state.Mem) -> None
def BindProcArgs(proc, cmd_val, mem, self_val=None):
# type: (value.Proc, cmd_value.Argv, state.Mem, value_t) -> None

proc_args = cmd_val.proc_args

Expand Down Expand Up @@ -489,7 +489,8 @@ def BindProcArgs(proc, cmd_val, mem):
blame_loc = proc_args.typed_args.left

pos_args = proc_args.pos_args if proc_args else None
if sig.positional: # or sig.block_param:
if sig.positional:
# TODO: Add self_val
_BindTyped(proc.name, sig.positional, proc.defaults.for_typed,
pos_args, mem, blame_loc)
else:
Expand Down

0 comments on commit 43ad0f2

Please sign in to comment.