X-Git-Url: https://git.saurik.com/cycript.git/blobdiff_plain/d15b59f5d4f43d12719c5ce37518246058b405c6..1504c9b837a7561d8ae2c81f1c4d57fe0f138781:/Cycript.l.in?ds=inline diff --git a/Cycript.l.in b/Cycript.l.in index cb2871d..bdd25ed 100644 --- a/Cycript.l.in +++ b/Cycript.l.in @@ -37,7 +37,7 @@ */ /* }}} */ -// XXX: supposedly I will be screwed on very very long multi-line comments and need to replace these with a manual lexer. http://websrv.cs.fsu.edu/~engelen/courses/COP5621/Pr2.pdf +/* XXX: supposedly I will be screwed on very very long multi-line comments and need to replace these with a manual lexer. http://websrv.cs.fsu.edu/~engelen/courses/COP5621/Pr2.pdf */ %{ #define YYLTYPE cy::location @@ -107,7 +107,8 @@ int H(char c) { } else if (yyextra->size_ == 0) \ value = YY_NULL; \ else { \ - size_t copy(std::min(size, yyextra->size_)); \ + size_t copy(size); \ + copy = (std::min(copy, yyextra->size_)); \ memcpy(data, yyextra->data_, copy); \ yyextra->data_ += copy; \ yyextra->size_ -= copy; \ @@ -160,7 +161,11 @@ XMLName {XMLNameStart}{XMLNamePart}* <RegExp>\/{RegularExpressionBody}\/{RegularExpressionFlags} E("") \/\/[^\n]* L -\/\*(\n|[^\*]|\*[^/])*\*\/ V(N) + + /* http://ostermiller.org/findcomment.html */ + /* XXX: unify these two rules using !? */ +\/\*!([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+\/ V() C yylval->comment_ = new(yyextra->pool_) CYComment(apr_pstrmemdup(yyextra->pool_, yytext, yyleng)); return tk::Comment; +\/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+\/ V(N) @begin E4X <RegExp>"<>" L return tk::LeftRight; @@ -188,11 +193,14 @@ XMLName {XMLNameStart}{XMLNamePart}* @end @begin E4X -"@" L C return tk::At; "::" L C return tk::ColonColon; ".." L C return tk::PeriodPeriod; @end +@begin E4X ObjectiveC +"@" L C return tk::At; +@end + "&" L C return tk::Ampersand; "&&" L C return tk::AmpersandAmpersand; "&=" L C return tk::AmpersandEqual; @@ -335,14 +343,14 @@ XMLName {XMLNameStart}{XMLNamePart}* (\.[0-9]+|(0|[1-9][0-9]*)(\.[0-9]*)?){Exponent}? L C yylval->number_ = new(yyextra->pool_) CYNumber(strtod(yytext, NULL)); return tk::NumericLiteral; 0[xX][0-9a-fA-F]+ L C yylval->number_ = new(yyextra->pool_) CYNumber(strtoull(yytext + 2, NULL, 16)); return tk::NumericLiteral; - +0[0-7]+ L C yylval->number_ = new(yyextra->pool_) CYNumber(strtoull(yytext + 1, NULL, 8)); return tk::NumericLiteral; 0[bB][0-1]+ L C yylval->number_ = new(yyextra->pool_) CYNumber(strtoull(yytext + 2, NULL, 2)); return tk::NumericLiteral; \"([^"\\\n]|{Escape})*\"|'([^'\\\n]|{Escape})*' L C { char *value(reinterpret_cast<char *>(apr_palloc(yyextra->pool_, yyleng))); char *local(value); - for (int i(1); i != yyleng - 1; ++i) { + for (yy_size_t i(1), e(yyleng - 1); i != e; ++i) { char next(yytext[i]); if (yytext[i] == '\\') @@ -376,7 +384,8 @@ XMLName {XMLNameStart}{XMLNamePart}* \r?\n yylloc->end.lines(); yylloc->step(); N [ \t] L -<<EOF>> L yyterminate(); + +<<EOF>> if (yyextra->auto_) { yyextra->auto_ = false; return tk::AutoComplete; } L yyterminate(); . L { CYDriver::Error error;