/* * C, C++ and doc style comments. Return token or zero for no token. */ static int getComment(EcInput *input, EcToken *tp, int c) { EcStream *stream; int form, startLine; startLine = tp->stream->lineNumber; stream = input->stream; form = c; // TODO - would be great to warn about comment nested in a comment. for (form = c; c > 0;) { c = getNextChar(stream); if (c <= 0) { /* * Unterminated Comment */ addFormattedStringToToken(tp, "Unterminated comment starting on line %d", startLine); makeToken(tp, 0, form == '/' ? T_EOF: T_ERR, 0); return 1; } if (form == '/') { if (c == '\n') { break; } } else { if (c == '*') { c = getNextChar(stream); if (c == '/') { break; } addCharToToken(tp, '*'); putBackChar(stream, c); } else if (c == '/') { c = getNextChar(stream); if (c == '*') { /* * Nested comment */ if (input->compiler->warnLevel > 0) { ecReportError(input->compiler, "warning", stream->name, stream->lineNumber, 0, stream->column, "Possible nested comment"); } } addCharToToken(tp, '/'); } } addCharToToken(tp, c); } return 0; }
/* C, C++ and doc style comments. Return token or zero for no token. */ static int getComment(EcCompiler *cp, EcToken *tp, int c) { EcStream *stream; int form, startLine; startLine = cp->stream->loc.lineNumber; stream = cp->stream; form = c; for (form = c; c > 0;) { c = getNextChar(stream); if (c <= 0) { /* Unterminated Comment */ addFormattedStringToToken(tp, "Unterminated comment starting on line %d", startLine); makeToken(tp, 0, form == '/' ? T_EOF: T_ERR, 0); return 1; } if (form == '/') { if (c == '\n' || c == '\r') { break; } } else { if (c == '*') { c = getNextChar(stream); if (c == '/') { break; } addCharToToken(tp, '*'); putBackChar(stream, c); } else if (c == '/') { c = getNextChar(stream); if (c == '*') { /* Nested comment */ if (cp->warnLevel > 0) { ecError(cp, "Warning", &stream->loc, "Possible nested comment"); } } addCharToToken(tp, '/'); } } addCharToToken(tp, c); } return 0; }