mirror of
https://github.com/fish-shell/fish-shell.git
synced 2025-03-25 12:45:14 +08:00
Convert some cases where parsers are created to using PARSER_TYPE_GENERAL
This commit is contained in:
parent
b43c8da66b
commit
8403aae928
2
env.cpp
2
env.cpp
@ -258,7 +258,7 @@ static void start_fishd()
|
||||
}
|
||||
|
||||
wcstring cmd = format_string(FISHD_CMD, pw->pw_name);
|
||||
parser_t parser(PARSER_TYPE_GENERAL);
|
||||
parser_t &parser = parser_t::principal_parser();
|
||||
parser.eval( cmd.c_str(), 0, TOP );
|
||||
}
|
||||
|
||||
|
2
exec.cpp
2
exec.cpp
@ -1765,7 +1765,7 @@ int exec_subshell( const wchar_t *cmd,
|
||||
|
||||
prev_status = proc_get_last_status();
|
||||
|
||||
parser_t parser(PARSER_TYPE_GENERAL);
|
||||
parser_t &parser = parser_t::principal_parser();
|
||||
if( parser.eval( cmd, io_buffer, SUBST ) )
|
||||
{
|
||||
status = -1;
|
||||
|
2
fish.cpp
2
fish.cpp
@ -77,7 +77,7 @@ static int read_init()
|
||||
wchar_t *config_dir_escaped;
|
||||
void *context;
|
||||
string_buffer_t *eval_buff;
|
||||
parser_t parser(PARSER_TYPE_GENERAL);
|
||||
parser_t &parser = parser_t::principal_parser();
|
||||
|
||||
parser.eval( L"builtin . " DATADIR "/fish/config.fish 2>/dev/null", 0, TOP );
|
||||
parser.eval( L"builtin . " SYSCONFDIR L"/fish/config.fish 2>/dev/null", 0, TOP );
|
||||
|
67
parser.cpp
67
parser.cpp
@ -353,51 +353,22 @@ static const struct block_lookup_entry block_lookup[]=
|
||||
{
|
||||
0, 0, 0
|
||||
}
|
||||
}
|
||||
;
|
||||
};
|
||||
|
||||
/** Last error code */
|
||||
static int error_code;
|
||||
|
||||
event_block_t *global_event_block=0;
|
||||
|
||||
io_data_t *block_io;
|
||||
|
||||
/** Position of last error */
|
||||
|
||||
static int err_pos;
|
||||
|
||||
/** Description of last error */
|
||||
static string_buffer_t *err_buff=0;
|
||||
|
||||
/** Pointer to the current tokenizer */
|
||||
static tokenizer *current_tokenizer;
|
||||
|
||||
/** String for representing the current line */
|
||||
static string_buffer_t *lineinfo=0;
|
||||
|
||||
/** This is the position of the beginning of the currently parsed command */
|
||||
static int current_tokenizer_pos;
|
||||
|
||||
/** The current innermost block */
|
||||
block_t *current_block=0;
|
||||
|
||||
/** List of called functions, used to help prevent infinite recursion */
|
||||
static std::vector<wcstring> forbidden_function;
|
||||
|
||||
/**
|
||||
String index where the current job started.
|
||||
*/
|
||||
static int job_start_pos;
|
||||
|
||||
/**
|
||||
Keeps track of how many recursive eval calls have been made. Eval
|
||||
doesn't call itself directly, recursion happens on blocks and on
|
||||
command substitutions.
|
||||
*/
|
||||
static int eval_level=-1;
|
||||
|
||||
parser_t::parser_t(enum parser_type_t type) : parser_type(type)
|
||||
parser_t::parser_t(enum parser_type_t type) :
|
||||
parser_type(type),
|
||||
error_code(0),
|
||||
err_pos(0),
|
||||
err_buff(NULL),
|
||||
current_tokenizer(NULL),
|
||||
lineinfo(NULL),
|
||||
current_tokenizer_pos(0),
|
||||
job_start_pos(0),
|
||||
eval_level(-1),
|
||||
current_block(NULL),
|
||||
global_event_block(NULL),
|
||||
block_io(NULL)
|
||||
{
|
||||
|
||||
}
|
||||
@ -787,7 +758,7 @@ void parser_t::print_errors( string_buffer_t *target, const wchar_t *prefix )
|
||||
/**
|
||||
Print error message to stderr if an error has occured while parsing
|
||||
*/
|
||||
static void print_errors_stderr(parser_t &parser)
|
||||
void parser_t::print_errors_stderr()
|
||||
{
|
||||
if( error_code && err_buff )
|
||||
{
|
||||
@ -797,7 +768,7 @@ static void print_errors_stderr(parser_t &parser)
|
||||
tmp = current_tokenizer_pos;
|
||||
current_tokenizer_pos = err_pos;
|
||||
|
||||
fwprintf( stderr, L"%ls", parser.current_line() );
|
||||
fwprintf( stderr, L"%ls", this->current_line() );
|
||||
|
||||
current_tokenizer_pos=tmp;
|
||||
}
|
||||
@ -876,7 +847,7 @@ int parser_t::eval_args( const wchar_t *line, array_list_t *args )
|
||||
}
|
||||
}
|
||||
|
||||
print_errors_stderr(*this);
|
||||
this->print_errors_stderr();
|
||||
|
||||
tok_destroy( &tok );
|
||||
|
||||
@ -996,7 +967,7 @@ void parser_t::stack_trace( block_t *b, string_buffer_t *buff)
|
||||
moving down the block-scope-stack, checking every block if it is of
|
||||
type FUNCTION_CALL.
|
||||
*/
|
||||
static const wchar_t *is_function()
|
||||
const wchar_t *parser_t::is_function() const
|
||||
{
|
||||
block_t *b = current_block;
|
||||
while( 1 )
|
||||
@ -2558,7 +2529,7 @@ int parser_t::eval( const wcstring &cmdStr, io_data_t *io, enum block_type_t blo
|
||||
parser_t::pop_block();
|
||||
}
|
||||
|
||||
print_errors_stderr(*this);
|
||||
this->print_errors_stderr();
|
||||
|
||||
tok_destroy( current_tokenizer );
|
||||
free( current_tokenizer );
|
||||
|
40
parser.h
40
parser.h
@ -217,16 +217,56 @@ class parser_t {
|
||||
enum parser_type_t parser_type;
|
||||
std::vector<block_t> blocks;
|
||||
|
||||
/** Last error code */
|
||||
int error_code;
|
||||
|
||||
/** Position of last error */
|
||||
int err_pos;
|
||||
|
||||
/** Description of last error */
|
||||
string_buffer_t *err_buff;
|
||||
|
||||
/** Pointer to the current tokenizer */
|
||||
tokenizer *current_tokenizer;
|
||||
|
||||
/** String for representing the current line */
|
||||
string_buffer_t *lineinfo;
|
||||
|
||||
/** This is the position of the beginning of the currently parsed command */
|
||||
int current_tokenizer_pos;
|
||||
|
||||
/** List of called functions, used to help prevent infinite recursion */
|
||||
std::vector<wcstring> forbidden_function;
|
||||
|
||||
/** String index where the current job started. */
|
||||
int job_start_pos;
|
||||
|
||||
/**
|
||||
Keeps track of how many recursive eval calls have been made. Eval
|
||||
doesn't call itself directly, recursion happens on blocks and on
|
||||
command substitutions.
|
||||
*/
|
||||
int eval_level;
|
||||
|
||||
/* No copying allowed */
|
||||
parser_t(const parser_t&);
|
||||
parser_t& operator=(const parser_t&);
|
||||
|
||||
/**
|
||||
Returns the name of the currently evaluated function if we are
|
||||
currently evaluating a function, null otherwise. This is tested by
|
||||
moving down the block-scope-stack, checking every block if it is of
|
||||
type FUNCTION_CALL.
|
||||
*/
|
||||
const wchar_t *is_function() const;
|
||||
|
||||
void parse_job_argument_list( process_t *p, job_t *j, tokenizer *tok, array_list_t *args );
|
||||
int parse_job( process_t *p, job_t *j, tokenizer *tok );
|
||||
void skipped_exec( job_t * j );
|
||||
void eval_job( tokenizer *tok );
|
||||
int parser_test_argument( const wchar_t *arg, string_buffer_t *out, const wchar_t *prefix, int offset );
|
||||
void print_errors( string_buffer_t *target, const wchar_t *prefix );
|
||||
void print_errors_stderr();
|
||||
|
||||
public:
|
||||
std::vector<profile_item_t> profile_items;
|
||||
|
@ -1257,7 +1257,7 @@ static void run_pager( wchar_t *prefix, int is_quoted, array_list_t *comp )
|
||||
out->next = in;
|
||||
out->fd = 4;
|
||||
|
||||
parser_t parser(PARSER_TYPE_GENERAL);
|
||||
parser_t &parser = parser_t::principal_parser();
|
||||
parser.eval( (wchar_t *)cmd.buff, out, TOP);
|
||||
term_steal();
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user