You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

73 lines
2.0 KiB

/**
* @file flag_parens.cpp
*
* @author Guy Maurel
* @license GPL v2+
*/
#include "flag_parens.h"
#include "uncrustify.h"
Chunk *flag_parens(Chunk *po, PcfFlags flags, E_Token opentype, E_Token parent_type, bool parent_all)
{
LOG_FUNC_ENTRY();
Chunk *paren_close;
paren_close = po->GetClosingParen(E_Scope::PREPROC);
if (paren_close->IsNullChunk())
{
LOG_FMT(LERR, "%s(%d): no match for '%s' at [%zu:%zu]",
__func__, __LINE__, po->Text(), po->GetOrigLine(), po->GetOrigCol());
log_func_stack_inline(LERR);
exit(EX_SOFTWARE);
}
LOG_FMT(LFLPAREN, "%s(%d): between po is '%s', orig line is %zu, orig col is %zu, and\n",
__func__, __LINE__, po->Text(), po->GetOrigLine(), po->GetOrigCol());
LOG_FMT(LFLPAREN, "%s(%d): paren_close is '%s', orig line is %zu, orig col is %zu, type is %s, parent type is %s\n",
__func__, __LINE__, paren_close->Text(), paren_close->GetOrigLine(), paren_close->GetOrigCol(),
get_token_name(opentype), get_token_name(parent_type));
log_func_stack_inline(LFLPAREN);
// the last chunk must be also modified. Issue #2149
Chunk *after_paren_close = paren_close->GetNext();
if (po != paren_close)
{
if ( flags != PCF_NONE
|| ( parent_all
&& parent_type != CT_NONE))
{
Chunk *pc;
//for (pc = po;
for (pc = po->GetNext(E_Scope::PREPROC);
pc->IsNotNullChunk() && pc != after_paren_close;
pc = pc->GetNext(E_Scope::PREPROC))
{
pc->SetFlagBits(flags);
if (parent_all)
{
pc->SetParentType(parent_type);
}
}
}
if (opentype != CT_NONE)
{
po->SetType(opentype);
paren_close->SetType((E_Token)(opentype + 1));
}
if (parent_type != CT_NONE)
{
po->SetParentType(parent_type);
paren_close->SetParentType(parent_type);
}
}
return(paren_close->GetNextNcNnl(E_Scope::PREPROC));
} // flag_parens