Clean up some warnings and some unused if-related code

This commit is contained in:
ridiculousfish 2012-09-01 12:29:00 -07:00
parent de5223db66
commit ff124465fd
6 changed files with 27 additions and 71 deletions

View file

@ -3380,7 +3380,7 @@ static int builtin_else( parser_t &parser, wchar_t **argv )
{ {
if_block = static_cast<if_block_t *>(parser.current_block); if_block = static_cast<if_block_t *>(parser.current_block);
/* Ensure that we're past IF but not up to an ELSE */ /* Ensure that we're past IF but not up to an ELSE */
if (if_block->if_expr_evaluated && ! if_block->has_reached_else()) if (if_block->if_expr_evaluated && ! if_block->else_evaluated)
{ {
block_ok = true; block_ok = true;
} }
@ -3399,7 +3399,7 @@ static int builtin_else( parser_t &parser, wchar_t **argv )
/* Run the else block if the IF expression was false and so were all the ELSEIF expressions (if any) */ /* Run the else block if the IF expression was false and so were all the ELSEIF expressions (if any) */
bool run_else = ! if_block->any_branch_taken; bool run_else = ! if_block->any_branch_taken;
if_block->skip = ! run_else; if_block->skip = ! run_else;
if_block->if_state = if_block_t::if_state_else; if_block->else_evaluated = true;
env_pop(); env_pop();
env_push(0); env_push(0);
} }
@ -3410,44 +3410,6 @@ static int builtin_else( parser_t &parser, wchar_t **argv )
return proc_get_last_status(); return proc_get_last_status();
} }
static int builtin_elseif( parser_t &parser, wchar_t **argv )
{
puts("BULITIN ELSEIF");
bool block_ok = false;
if_block_t *if_block = NULL;
if (parser.current_block != NULL && parser.current_block->type() == IF)
{
if_block = static_cast<if_block_t *>(parser.current_block);
/* Make sure that we're past IF, but not up to an ELSE */
if (if_block->if_expr_evaluated && ! if_block->has_reached_else())
{
block_ok = true;
}
}
if( ! block_ok )
{
append_format(stderr_buffer,
_( L"%ls: Not inside of 'if' block\n" ),
argv[0] );
builtin_print_help( parser, argv[0], stderr_buffer );
return STATUS_BUILTIN_ERROR;
}
else
{
/* Run this elseif if the IF expression was false, and so were all ELSEIF expressions thus far. */
bool run_elseif = ! if_block->any_branch_taken;
if_block->skip = ! run_elseif;
env_pop();
env_push(0);
}
/*
If everything goes ok, return status of last command to execute.
*/
return proc_get_last_status();
}
/** /**
This function handles both the 'continue' and the 'break' builtins This function handles both the 'continue' and the 'break' builtins
that are used for loop control. that are used for loop control.

View file

@ -288,7 +288,7 @@ static int update_values( wcstring_list_t &list,
{ {
return 1; return 1;
} }
if ( ind >= list.size() ) if ( (size_t)ind >= list.size() )
{ {
list.resize( ind+1 ); list.resize( ind+1 );
} }

View file

@ -116,7 +116,7 @@ void exec_close( int fd )
} }
/* Maybe remove this from our set of open fds */ /* Maybe remove this from our set of open fds */
if (fd < open_fds.size()) { if ((size_t)fd < open_fds.size()) {
open_fds[fd] = false; open_fds[fd] = false;
} }
} }
@ -125,7 +125,7 @@ int exec_pipe( int fd[2])
{ {
int res; int res;
while( ( res=pipe( fd ) ) ) while ((res=pipe(fd)))
{ {
if( errno != EINTR ) if( errno != EINTR )
{ {
@ -137,7 +137,7 @@ int exec_pipe( int fd[2])
debug( 4, L"Created pipe using fds %d and %d", fd[0], fd[1]); debug( 4, L"Created pipe using fds %d and %d", fd[0], fd[1]);
int max_fd = std::max(fd[0], fd[1]); int max_fd = std::max(fd[0], fd[1]);
if (open_fds.size() <= max_fd) { if (max_fd >= 0 && open_fds.size() <= (size_t)max_fd) {
open_fds.resize(max_fd + 1, false); open_fds.resize(max_fd + 1, false);
} }
open_fds.at(fd[0]) = true; open_fds.at(fd[0]) = true;

View file

@ -1314,7 +1314,7 @@ void highlight_shell( const wcstring &buff, std::vector<int> &color, size_t pos,
// highlight the end of the subcommand // highlight the end of the subcommand
assert(end >= subbuff); assert(end >= subbuff);
if ((end - subbuff) < length) { if ((size_t)(end - subbuff) < length) {
color.at(end-subbuff)=HIGHLIGHT_OPERATOR; color.at(end-subbuff)=HIGHLIGHT_OPERATOR;
} }

View file

@ -3308,6 +3308,9 @@ int parser_t::test( const wchar_t * buff,
command.c_str()); command.c_str());
print_errors( *out, prefix ); print_errors( *out, prefix );
/* Don't complain about elseif missing a command for elseif if we already complained about elseif being out of place */
if (needs_cmd) had_cmd = true;
} }
} }
@ -3716,12 +3719,11 @@ block_t::~block_t()
/* Various block constructors */ /* Various block constructors */
if_block_t::if_block_t() : if_block_t::if_block_t() :
block_t(IF),
if_expr_evaluated(false), if_expr_evaluated(false),
any_branch_taken(false),
is_elseif_entry(false), is_elseif_entry(false),
else_evaluated(false), any_branch_taken(false),
if_state(if_state_if), else_evaluated(false)
block_t(IF)
{ {
} }
@ -3732,35 +3734,35 @@ event_block_t::event_block_t(const event_t *evt) :
} }
function_block_t::function_block_t(process_t *p, const wcstring &n, bool shadows) : function_block_t::function_block_t(process_t *p, const wcstring &n, bool shadows) :
block_t( shadows ? FUNCTION_CALL : FUNCTION_CALL_NO_SHADOW ),
process(p), process(p),
name(n), name(n)
block_t( shadows ? FUNCTION_CALL : FUNCTION_CALL_NO_SHADOW )
{ {
} }
source_block_t::source_block_t(const wchar_t *src) : source_block_t::source_block_t(const wchar_t *src) :
source_file(src), block_t(SOURCE),
block_t(SOURCE) source_file(src)
{ {
} }
for_block_t::for_block_t(const wcstring &var) : for_block_t::for_block_t(const wcstring &var) :
block_t(FOR),
variable(var), variable(var),
sequence(), sequence()
block_t(FOR)
{ {
} }
while_block_t::while_block_t() : while_block_t::while_block_t() :
status(0), block_t(WHILE),
block_t(WHILE) status(0)
{ {
} }
switch_block_t::switch_block_t(const wcstring &sv) : switch_block_t::switch_block_t(const wcstring &sv) :
block_t(SWITCH),
switch_taken(false), switch_taken(false),
switch_value(sv), switch_value(sv)
block_t(SWITCH)
{ {
} }
@ -3770,8 +3772,8 @@ fake_block_t::fake_block_t() :
} }
function_def_block_t::function_def_block_t() : function_def_block_t::function_def_block_t() :
function_data(), block_t(FUNCTION_DEF),
block_t(FUNCTION_DEF) function_data()
{ {
} }

View file

@ -140,19 +140,11 @@ struct block_t
struct if_block_t : public block_t struct if_block_t : public block_t
{ {
bool if_expr_evaluated; // whether the clause of the if statement has been tested bool if_expr_evaluated; // whether we've evaluated the if expression
bool is_elseif_entry; // whether we're at the beginning of an active branch (IF or ELSEIF)
bool any_branch_taken; // whether the clause of the if statement or any elseif has been found to be true bool any_branch_taken; // whether the clause of the if statement or any elseif has been found to be true
bool is_elseif_entry; // whether we're the first command in an elseif.
bool else_evaluated; // whether we've encountered a terminal else block bool else_evaluated; // whether we've encountered a terminal else block
enum {
if_state_if,
if_state_elseif,
if_state_else
} if_state;
bool has_reached_else() const { return if_state == if_state_else; }
if_block_t(); if_block_t();
}; };