preprocesser function now only returns a pp_err_t
We leave the parameter tokens alone, considering it constant, while the parameter vec_out is used to hold the new stream of tokens. This allows the caller to have a before and after view on the token stream and reduces the worry of double frees.
This commit is contained in:
@@ -27,13 +27,17 @@ using std::pair, std::vector, std::make_pair, std::string, std::string_view;
|
|||||||
delete t; \
|
delete t; \
|
||||||
});
|
});
|
||||||
|
|
||||||
pair<vector<token_t *>, pp_err_t> preprocesser(vector<token_t *> &tokens)
|
pp_err_t preprocesser(const vector<token_t *> &tokens,
|
||||||
|
vector<token_t *> &vec_out)
|
||||||
{
|
{
|
||||||
vector<token_t *> use_block_tokens;
|
vector<token_t *> use_block_tokens;
|
||||||
pp_err_t pperr{pp_err_type_t::OK};
|
pp_err_t pperr{pp_err_type_t::OK};
|
||||||
std::tie(use_block_tokens, pperr) = preprocess_use_blocks(tokens);
|
std::tie(use_block_tokens, pperr) = preprocess_use_blocks(tokens);
|
||||||
if (pperr.type != pp_err_type_t::OK)
|
if (pperr.type != pp_err_type_t::OK)
|
||||||
return ERR(pperr);
|
{
|
||||||
|
vec_out = tokens;
|
||||||
|
return pperr;
|
||||||
|
}
|
||||||
|
|
||||||
vector<token_t *> const_block_tokens;
|
vector<token_t *> const_block_tokens;
|
||||||
std::tie(const_block_tokens, pperr) =
|
std::tie(const_block_tokens, pperr) =
|
||||||
@@ -41,12 +45,14 @@ pair<vector<token_t *>, pp_err_t> preprocesser(vector<token_t *> &tokens)
|
|||||||
if (pperr.type != pp_err_type_t::OK)
|
if (pperr.type != pp_err_type_t::OK)
|
||||||
{
|
{
|
||||||
VCLEAR(tokens);
|
VCLEAR(tokens);
|
||||||
tokens = use_block_tokens;
|
vec_out = use_block_tokens;
|
||||||
return ERR(pperr);
|
return pperr;
|
||||||
}
|
}
|
||||||
|
|
||||||
VCLEAR(use_block_tokens);
|
VCLEAR(use_block_tokens);
|
||||||
return VAL(const_block_tokens);
|
vec_out = const_block_tokens;
|
||||||
|
|
||||||
|
return pp_err_t{pp_err_type_t::OK};
|
||||||
}
|
}
|
||||||
|
|
||||||
pair<vector<token_t *>, pp_err_t>
|
pair<vector<token_t *>, pp_err_t>
|
||||||
|
|||||||
@@ -42,8 +42,7 @@ struct pp_err_t
|
|||||||
|
|
||||||
std::ostream &operator<<(std::ostream &, pp_err_t &);
|
std::ostream &operator<<(std::ostream &, pp_err_t &);
|
||||||
|
|
||||||
std::pair<std::vector<token_t *>, pp_err_t>
|
pp_err_t preprocesser(const std::vector<token_t *> &, std::vector<token_t *> &);
|
||||||
preprocesser(std::vector<token_t *> &);
|
|
||||||
|
|
||||||
std::pair<std::vector<token_t *>, pp_err_t>
|
std::pair<std::vector<token_t *>, pp_err_t>
|
||||||
preprocess_const_blocks(const std::vector<token_t *> &);
|
preprocess_const_blocks(const std::vector<token_t *> &);
|
||||||
|
|||||||
Reference in New Issue
Block a user