/** * Count the number of characters in a word. * The first character is already valid for a keyword * * @param pc The structure to update, str is an input. * @return Whether a word was parsed (always true) */ bool parse_word(tok_ctx& ctx, chunk_t& pc, bool skipcheck) { int ch; static unc_text intr_txt("@interface"); /* The first character is already valid */ pc.str.clear(); pc.str.append(ctx.get()); while (ctx.more() && CharTable::IsKw2(ctx.peek())) { ch = ctx.get(); pc.str.append(ch); /* HACK: Non-ASCII character are only allowed in identifiers */ if (ch > 0x7f) { skipcheck = true; } } pc.type = CT_WORD; if (skipcheck) { return(true); } /* Detect pre-processor functions now */ if ((cpd.in_preproc == CT_PP_DEFINE) && (cpd.preproc_ncnl_count == 1)) { if (ctx.peek() == '(') { pc.type = CT_MACRO_FUNC; } else { pc.type = CT_MACRO; } } else { /* '@interface' is reserved, not an interface itself */ if ((cpd.lang_flags & LANG_JAVA) && pc.str.startswith("@") && !pc.str.equals(intr_txt)) { pc.type = CT_ANNOTATION; } else { /* Turn it into a keyword now */ pc.type = find_keyword_type(pc.text(), pc.str.size()); } } return(true); } // parse_word
/** * Count the number of characters in a word. * The first character is already valid for a keyword * * @param pc The structure to update, str is an input. * @return Whether a word was parsed (always true) */ bool parse_word(tok_ctx& ctx, chunk_t& pc, bool skipcheck) { int ch; /* The first character is already valid */ pc.str.clear(); pc.str.append(ctx.get()); while (ctx.more() && CharTable::IsKw2(ctx.peek())) { ch = ctx.get(); pc.str.append(ch); /* HACK: Non-ASCII character are only allowed in identifiers */ if (ch > 0x7f) { skipcheck = true; } } pc.type = CT_WORD; if (skipcheck) { return(true); } /* Detect pre-processor functions now */ if ((cpd.in_preproc == CT_PP_DEFINE) && (cpd.preproc_ncnl_count == 1)) { if (ctx.peek() == '(') { pc.type = CT_MACRO_FUNC; } else { pc.type = CT_MACRO; } } else { /* Turn it into a keyword now */ pc.type = find_keyword_type(pc.str.c_str(), pc.str.size()); } return(true); }