mirror of
https://github.com/ksherlock/mpw-shell.git
synced 2024-06-12 21:29:51 +00:00
Compare commits
No commits in common. "91590e92aa868e79759898f2e042357b69be866c" and "f799eb6d8154899f223ecd344df64aa308248c63" have entirely different histories.
91590e92aa
...
f799eb6d81
|
@ -188,8 +188,7 @@ int builtin_shift(Environment &env, const std::vector<std::string> &tokens, cons
|
|||
}
|
||||
|
||||
if (n == 0) return 0;
|
||||
env.shift(n);
|
||||
#if 0
|
||||
|
||||
auto argv = load_argv(env);
|
||||
if (argv.empty()) return 0;
|
||||
|
||||
|
@ -200,7 +199,7 @@ int builtin_shift(Environment &env, const std::vector<std::string> &tokens, cons
|
|||
} while (--n);
|
||||
|
||||
env.set_argv(argv);
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -400,7 +400,7 @@ int simple_command::execute(Environment &env, const fdmask &fds, bool throwup) {
|
|||
// scripts run with an isolated environment.
|
||||
Environment new_env = env.subshell_environment();
|
||||
new_env.set("command", path);
|
||||
new_env.set_argv(p.arguments);
|
||||
new_env.set_argv(path, p.arguments);
|
||||
|
||||
try {
|
||||
return read_file(new_env, path, newfds);
|
||||
|
|
|
@ -112,17 +112,15 @@ namespace {
|
|||
set_common(k, std::to_string(value), exported);
|
||||
}
|
||||
|
||||
#if 0
|
||||
void Environment::set_argv(const std::string &argv0, const std::vector<std::string>& argv) {
|
||||
set_common("0", argv0, false);
|
||||
set_argv(argv);
|
||||
}
|
||||
#endif
|
||||
void Environment::set_argv(const std::vector<std::string>& argv) {
|
||||
_pound = argv.size() - 1;
|
||||
set_common("#", std::to_string(_pound), false);
|
||||
_pound = argv.size();
|
||||
set_common("#", std::to_string(argv.size()), false);
|
||||
|
||||
int n = 0;
|
||||
int n = 1;
|
||||
for (const auto &s : argv) {
|
||||
set_common(std::to_string(n++), s, false);
|
||||
}
|
||||
|
@ -145,22 +143,8 @@ namespace {
|
|||
}
|
||||
p.pop_back();
|
||||
set_common("parameters", p, false);
|
||||
}
|
||||
|
||||
void Environment::shift(int n) {
|
||||
if (n < 0) return;
|
||||
if (_pound < 1) return;
|
||||
|
||||
std::vector<std::string> argv;
|
||||
argv.push_back(get("0"));
|
||||
|
||||
for (int i = 1 + n; i <= _pound; ++i) {
|
||||
argv.push_back(get(std::to_string(i)));
|
||||
}
|
||||
for (int i = 0; i < n; ++i) {
|
||||
unset(std::to_string(_pound - i));
|
||||
}
|
||||
set_argv(argv);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -59,11 +59,9 @@ public:
|
|||
|
||||
Environment subshell_environment();
|
||||
|
||||
// void set_argv(const std::string &argv0, const std::vector<std::string>& argv);
|
||||
void set_argv(const std::string &argv0, const std::vector<std::string>& argv);
|
||||
void set_argv(const std::vector<std::string>& argv);
|
||||
|
||||
void shift(int n);
|
||||
|
||||
void set(const std::string &k, const std::string &value, bool exported = false);
|
||||
void set(const std::string &k, long l, bool exported = false);
|
||||
void unset(const std::string &k);
|
||||
|
|
|
@ -322,8 +322,6 @@ int expression_parser::precedence(int op) {
|
|||
case '<=':
|
||||
case '>':
|
||||
case '>=':
|
||||
case 0xb2:
|
||||
case 0xb3:
|
||||
return 6;
|
||||
|
||||
case '==':
|
||||
|
@ -390,11 +388,9 @@ value expression_parser::eval(int op, value &lhs, value &rhs) {
|
|||
return lhs.to_number() < rhs.to_number();
|
||||
|
||||
case '<=':
|
||||
case 0xb2:
|
||||
return lhs.to_number() <= rhs.to_number();
|
||||
|
||||
case '>=':
|
||||
case 0xb3:
|
||||
return lhs.to_number() >= rhs.to_number();
|
||||
|
||||
case '>>':
|
||||
|
|
|
@ -70,22 +70,6 @@
|
|||
|
||||
# eval-only.
|
||||
|
||||
# macroman ≤
|
||||
0xb2 when eval
|
||||
%push_token => { tokens.emplace_back("\xb2", '<='); };
|
||||
|
||||
# macroman ≠
|
||||
0xad when eval
|
||||
%push_token => { tokens.emplace_back("\xad", '!='); };
|
||||
|
||||
# macroman ¬
|
||||
0xc2 when eval
|
||||
%push_token => { tokens.emplace_back("\xc2", '!'); };
|
||||
|
||||
# macroman ÷
|
||||
0xd6 when eval
|
||||
%push_token => { tokens.emplace_back("\xd6", '/'); };
|
||||
|
||||
'||' when eval
|
||||
%push_token => { tokens.emplace_back("||", '||'); };
|
||||
'|' when eval
|
||||
|
@ -94,14 +78,13 @@
|
|||
'&&' when eval
|
||||
%push_token => { tokens.emplace_back("&&", '&&'); };
|
||||
|
||||
|
||||
'(' when eval
|
||||
%push_token => { tokens.emplace_back("(", '('); };
|
||||
|
||||
')' when eval
|
||||
%push_token => { tokens.emplace_back(")", ')'); };
|
||||
|
||||
'<>' when eval
|
||||
%push_token => { tokens.emplace_back("<>", '!='); };
|
||||
|
||||
'<<' when eval
|
||||
%push_token => { tokens.emplace_back("<<", '<<'); };
|
||||
|
|
Loading…
Reference in New Issue
Block a user