MCPcopy Create free account
hub / github.com/ZDoom/Raze / parse

Function parse

tools/re2c/src/parse/parser.cc:2189–2380  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2187{
2188
2189void parse(Scanner& i, Output & o)
2190{
2191 std::map<std::string, smart_ptr<DFA> > dfa_map;
2192 ScannerState rules_state;
2193
2194 in = &i;
2195
2196 o.source.wversion_time ()
2197 .wline_info (in->get_cline (), in->get_fname ().c_str ());
2198 if (opts->target == opt_t::SKELETON)
2199 {
2200 Skeleton::emit_prolog (o.source);
2201 }
2202
2203 Enc encodingOld = opts->encoding;
2204
2205 while ((parseMode = i.echo()) != Scanner::Stop)
2206 {
2207 o.source.new_block ();
2208 bool bPrologBrace = false;
2209 ScannerState curr_state;
2210
2211 i.save_state(curr_state);
2212 foundRules = false;
2213
2214 if (opts->rFlag && parseMode == Scanner::Rules && dfa_map.size())
2215 {
2216 in->fatal("cannot have a second 'rules:re2c' block");
2217 }
2218 if (parseMode == Scanner::Reuse)
2219 {
2220 if (dfa_map.empty())
2221 {
2222 in->fatal("got 'use:re2c' without 'rules:re2c'");
2223 }
2224 }
2225 else if (parseMode == Scanner::Rules)
2226 {
2227 i.save_state(rules_state);
2228 }
2229 else
2230 {
2231 dfa_map.clear();
2232 }
2233 rank_counter.reset ();
2234 spec.clear ();
2235 in->set_in_parse(true);
2236 yyparse();
2237 in->set_in_parse(false);
2238 if (opts->rFlag && parseMode == Scanner::Reuse)
2239 {
2240 if (foundRules || opts->encoding != encodingOld)
2241 {
2242 // Re-parse rules
2243 parseMode = Scanner::Parse;
2244 i.restore_state(rules_state);
2245 i.reuse();
2246 dfa_map.clear();

Callers 4

parseMethod · 0.85
mainFunction · 0.85
parseifelseMethod · 0.85
parseMethod · 0.85

Calls 15

parse_cleanupFunction · 0.85
compileFunction · 0.85
get_clineMethod · 0.80
c_strMethod · 0.80
echoMethod · 0.80
new_blockMethod · 0.80
save_stateMethod · 0.80
set_in_parseMethod · 0.80
restore_stateMethod · 0.80
reuseMethod · 0.80
set_block_lineMethod · 0.80
add_defMethod · 0.80

Tested by

no test coverage detected