Патч для русского синтаксиса
This commit is contained in:
parent
b79de0bea5
commit
25854d0b99
|
|
@ -221,31 +221,48 @@ static zend_constant *zend_get_halt_offset_constant(const char *name, size_t nam
|
||||||
|
|
||||||
ZEND_API zend_constant *_zend_get_special_const(const char *name, size_t len) /* {{{ */
|
ZEND_API zend_constant *_zend_get_special_const(const char *name, size_t len) /* {{{ */
|
||||||
{
|
{
|
||||||
|
|
||||||
|
// Оригинальные проверки
|
||||||
if (len == 4) {
|
if (len == 4) {
|
||||||
if ((name[0] == 'n' || name[0] == 'N') &&
|
if ((name[0] == 'n' || name[0] == 'N') &&
|
||||||
(name[1] == 'u' || name[1] == 'U') &&
|
(name[1] == 'u' || name[1] == 'U') &&
|
||||||
(name[2] == 'l' || name[2] == 'L') &&
|
(name[2] == 'l' || name[2] == 'L') &&
|
||||||
(name[3] == 'l' || name[3] == 'L')
|
(name[3] == 'l' || name[3] == 'L')) {
|
||||||
) {
|
|
||||||
return null_const;
|
return null_const;
|
||||||
}
|
}
|
||||||
if ((name[0] == 't' || name[0] == 'T') &&
|
if ((name[0] == 't' || name[0] == 'T') &&
|
||||||
(name[1] == 'r' || name[1] == 'R') &&
|
(name[1] == 'r' || name[1] == 'R') &&
|
||||||
(name[2] == 'u' || name[2] == 'U') &&
|
(name[2] == 'u' || name[2] == 'U') &&
|
||||||
(name[3] == 'e' || name[3] == 'E')
|
(name[3] == 'e' || name[3] == 'E')) {
|
||||||
) {
|
|
||||||
return true_const;
|
return true_const;
|
||||||
}
|
}
|
||||||
} else {
|
} else if (len == 5) {
|
||||||
if ((name[0] == 'f' || name[0] == 'F') &&
|
if ((name[0] == 'f' || name[0] == 'F') &&
|
||||||
(name[1] == 'a' || name[1] == 'A') &&
|
(name[1] == 'a' || name[1] == 'A') &&
|
||||||
(name[2] == 'l' || name[2] == 'L') &&
|
(name[2] == 'l' || name[2] == 'L') &&
|
||||||
(name[3] == 's' || name[3] == 'S') &&
|
(name[3] == 's' || name[3] == 'S') &&
|
||||||
(name[4] == 'e' || name[4] == 'E')
|
(name[4] == 'e' || name[4] == 'E')) {
|
||||||
) {
|
|
||||||
return false_const;
|
return false_const;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Русские аналоги
|
||||||
|
if (len == 8) {
|
||||||
|
if (memcmp(name, "ложь", 8) == 0) {
|
||||||
|
return false_const;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (len == 10) {
|
||||||
|
if (memcmp(name, "пусто", 10) == 0) {
|
||||||
|
return null_const;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (len == 12) {
|
||||||
|
if (memcmp(name, "правда", 12) == 0) {
|
||||||
|
return true_const;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
/* }}} */
|
/* }}} */
|
||||||
|
|
|
||||||
|
|
@ -106,7 +106,11 @@ ZEND_API zend_constant *_zend_get_special_const(const char *name, size_t name_le
|
||||||
|
|
||||||
static zend_always_inline zend_constant *zend_get_special_const(
|
static zend_always_inline zend_constant *zend_get_special_const(
|
||||||
const char *name, size_t name_len) {
|
const char *name, size_t name_len) {
|
||||||
if (name_len == 4 || name_len == 5) {
|
|
||||||
|
// Английские: 4 (true, null), 5 (false)
|
||||||
|
// Русские: 8 (ложь), 10 (пусто), 12 (правда)
|
||||||
|
if (name_len == 4 || name_len == 5 ||
|
||||||
|
name_len == 8 || name_len == 10 || name_len == 12) {
|
||||||
return _zend_get_special_const(name, name_len);
|
return _zend_get_special_const(name, name_len);
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
|
||||||
|
|
@ -1395,27 +1395,27 @@ OPTIONAL_WHITESPACE_OR_COMMENTS ({WHITESPACE}|{MULTI_LINE_COMMENT}|{SINGLE_LINE_
|
||||||
/* compute yyleng before each rule */
|
/* compute yyleng before each rule */
|
||||||
<!*> := yyleng = YYCURSOR - SCNG(yy_text);
|
<!*> := yyleng = YYCURSOR - SCNG(yy_text);
|
||||||
|
|
||||||
<ST_IN_SCRIPTING>"exit" {
|
<ST_IN_SCRIPTING>"exit"|"выход" {
|
||||||
RETURN_TOKEN_WITH_IDENT(T_EXIT);
|
RETURN_TOKEN_WITH_IDENT(T_EXIT);
|
||||||
}
|
}
|
||||||
|
|
||||||
<ST_IN_SCRIPTING>"die" {
|
<ST_IN_SCRIPTING>"die"|"стоп" {
|
||||||
RETURN_TOKEN_WITH_IDENT(T_EXIT);
|
RETURN_TOKEN_WITH_IDENT(T_EXIT);
|
||||||
}
|
}
|
||||||
|
|
||||||
<ST_IN_SCRIPTING>"fn" {
|
<ST_IN_SCRIPTING>"fn"|"фн" {
|
||||||
RETURN_TOKEN_WITH_IDENT(T_FN);
|
RETURN_TOKEN_WITH_IDENT(T_FN);
|
||||||
}
|
}
|
||||||
|
|
||||||
<ST_IN_SCRIPTING>"function" {
|
<ST_IN_SCRIPTING>"function"|"функц" {
|
||||||
RETURN_TOKEN_WITH_IDENT(T_FUNCTION);
|
RETURN_TOKEN_WITH_IDENT(T_FUNCTION);
|
||||||
}
|
}
|
||||||
|
|
||||||
<ST_IN_SCRIPTING>"const" {
|
<ST_IN_SCRIPTING>"const"|"конст" {
|
||||||
RETURN_TOKEN_WITH_IDENT(T_CONST);
|
RETURN_TOKEN_WITH_IDENT(T_CONST);
|
||||||
}
|
}
|
||||||
|
|
||||||
<ST_IN_SCRIPTING>"return" {
|
<ST_IN_SCRIPTING>"return"|"возврат" {
|
||||||
RETURN_TOKEN_WITH_IDENT(T_RETURN);
|
RETURN_TOKEN_WITH_IDENT(T_RETURN);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1430,138 +1430,233 @@ OPTIONAL_WHITESPACE_OR_COMMENTS ({WHITESPACE}|{MULTI_LINE_COMMENT}|{SINGLE_LINE_
|
||||||
RETURN_TOKEN_WITH_IDENT(T_YIELD_FROM);
|
RETURN_TOKEN_WITH_IDENT(T_YIELD_FROM);
|
||||||
}
|
}
|
||||||
|
|
||||||
<ST_IN_SCRIPTING>"yield" {
|
<ST_IN_SCRIPTING>"yield"|"отдать" {
|
||||||
RETURN_TOKEN_WITH_IDENT(T_YIELD);
|
RETURN_TOKEN_WITH_IDENT(T_YIELD);
|
||||||
}
|
}
|
||||||
|
|
||||||
<ST_IN_SCRIPTING>"try" {
|
<ST_IN_SCRIPTING>"try"|"проб" {
|
||||||
RETURN_TOKEN_WITH_IDENT(T_TRY);
|
RETURN_TOKEN_WITH_IDENT(T_TRY);
|
||||||
}
|
}
|
||||||
|
|
||||||
<ST_IN_SCRIPTING>"catch" {
|
<ST_IN_SCRIPTING>"catch"|"отлов" {
|
||||||
RETURN_TOKEN_WITH_IDENT(T_CATCH);
|
RETURN_TOKEN_WITH_IDENT(T_CATCH);
|
||||||
}
|
}
|
||||||
|
|
||||||
<ST_IN_SCRIPTING>"finally" {
|
<ST_IN_SCRIPTING>"finally"|"к_проб" {
|
||||||
RETURN_TOKEN_WITH_IDENT(T_FINALLY);
|
RETURN_TOKEN_WITH_IDENT(T_FINALLY);
|
||||||
}
|
}
|
||||||
|
|
||||||
<ST_IN_SCRIPTING>"throw" {
|
<ST_IN_SCRIPTING>"throw"|"бросить" {
|
||||||
RETURN_TOKEN_WITH_IDENT(T_THROW);
|
RETURN_TOKEN_WITH_IDENT(T_THROW);
|
||||||
}
|
}
|
||||||
|
|
||||||
<ST_IN_SCRIPTING>"if" {
|
<ST_IN_SCRIPTING>"if"|"если" {
|
||||||
RETURN_TOKEN_WITH_IDENT(T_IF);
|
RETURN_TOKEN_WITH_IDENT(T_IF);
|
||||||
}
|
}
|
||||||
|
|
||||||
<ST_IN_SCRIPTING>"elseif" {
|
<ST_IN_SCRIPTING>"elseif"|"и_если" {
|
||||||
RETURN_TOKEN_WITH_IDENT(T_ELSEIF);
|
RETURN_TOKEN_WITH_IDENT(T_ELSEIF);
|
||||||
}
|
}
|
||||||
|
|
||||||
<ST_IN_SCRIPTING>"endif" {
|
<ST_IN_SCRIPTING>"endif"|"к_если" {
|
||||||
RETURN_TOKEN_WITH_IDENT(T_ENDIF);
|
RETURN_TOKEN_WITH_IDENT(T_ENDIF);
|
||||||
}
|
}
|
||||||
|
|
||||||
<ST_IN_SCRIPTING>"else" {
|
<ST_IN_SCRIPTING>"else"|"иначе" {
|
||||||
RETURN_TOKEN_WITH_IDENT(T_ELSE);
|
RETURN_TOKEN_WITH_IDENT(T_ELSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
<ST_IN_SCRIPTING>"while" {
|
<ST_IN_SCRIPTING>"while"|"пока" {
|
||||||
RETURN_TOKEN_WITH_IDENT(T_WHILE);
|
RETURN_TOKEN_WITH_IDENT(T_WHILE);
|
||||||
}
|
}
|
||||||
|
|
||||||
<ST_IN_SCRIPTING>"endwhile" {
|
<ST_IN_SCRIPTING>"endwhile"|"к_пока" {
|
||||||
RETURN_TOKEN_WITH_IDENT(T_ENDWHILE);
|
RETURN_TOKEN_WITH_IDENT(T_ENDWHILE);
|
||||||
}
|
}
|
||||||
|
|
||||||
<ST_IN_SCRIPTING>"do" {
|
<ST_IN_SCRIPTING>"do"|"делать" {
|
||||||
RETURN_TOKEN_WITH_IDENT(T_DO);
|
RETURN_TOKEN_WITH_IDENT(T_DO);
|
||||||
}
|
}
|
||||||
|
|
||||||
<ST_IN_SCRIPTING>"for" {
|
<ST_IN_SCRIPTING>"for"|"для" {
|
||||||
RETURN_TOKEN_WITH_IDENT(T_FOR);
|
RETURN_TOKEN_WITH_IDENT(T_FOR);
|
||||||
}
|
}
|
||||||
|
|
||||||
<ST_IN_SCRIPTING>"endfor" {
|
<ST_IN_SCRIPTING>"endfor"|"к_для" {
|
||||||
RETURN_TOKEN_WITH_IDENT(T_ENDFOR);
|
RETURN_TOKEN_WITH_IDENT(T_ENDFOR);
|
||||||
}
|
}
|
||||||
|
|
||||||
<ST_IN_SCRIPTING>"foreach" {
|
<ST_IN_SCRIPTING>"foreach"|"д_кажд" {
|
||||||
RETURN_TOKEN_WITH_IDENT(T_FOREACH);
|
RETURN_TOKEN_WITH_IDENT(T_FOREACH);
|
||||||
}
|
}
|
||||||
|
|
||||||
<ST_IN_SCRIPTING>"endforeach" {
|
<ST_IN_SCRIPTING>"endforeach"|"к_д_кажд" {
|
||||||
RETURN_TOKEN_WITH_IDENT(T_ENDFOREACH);
|
RETURN_TOKEN_WITH_IDENT(T_ENDFOREACH);
|
||||||
}
|
}
|
||||||
|
|
||||||
<ST_IN_SCRIPTING>"declare" {
|
<ST_IN_SCRIPTING>"declare"|"объяв" {
|
||||||
RETURN_TOKEN_WITH_IDENT(T_DECLARE);
|
RETURN_TOKEN_WITH_IDENT(T_DECLARE);
|
||||||
}
|
}
|
||||||
|
|
||||||
<ST_IN_SCRIPTING>"enddeclare" {
|
<ST_IN_SCRIPTING>"enddeclare"|"к_объяв" {
|
||||||
RETURN_TOKEN_WITH_IDENT(T_ENDDECLARE);
|
RETURN_TOKEN_WITH_IDENT(T_ENDDECLARE);
|
||||||
}
|
}
|
||||||
|
|
||||||
<ST_IN_SCRIPTING>"instanceof" {
|
<ST_IN_SCRIPTING>"instanceof"|"экз" {
|
||||||
RETURN_TOKEN_WITH_IDENT(T_INSTANCEOF);
|
RETURN_TOKEN_WITH_IDENT(T_INSTANCEOF);
|
||||||
}
|
}
|
||||||
|
|
||||||
<ST_IN_SCRIPTING>"as" {
|
<ST_IN_SCRIPTING>"as"|"как" {
|
||||||
RETURN_TOKEN_WITH_IDENT(T_AS);
|
RETURN_TOKEN_WITH_IDENT(T_AS);
|
||||||
}
|
}
|
||||||
|
|
||||||
<ST_IN_SCRIPTING>"switch" {
|
<ST_IN_SCRIPTING>"switch"|"перекл" {
|
||||||
RETURN_TOKEN_WITH_IDENT(T_SWITCH);
|
RETURN_TOKEN_WITH_IDENT(T_SWITCH);
|
||||||
}
|
}
|
||||||
|
|
||||||
<ST_IN_SCRIPTING>"match" {
|
<ST_IN_SCRIPTING>"match"|"сопостав" {
|
||||||
RETURN_TOKEN_WITH_IDENT(T_MATCH);
|
RETURN_TOKEN_WITH_IDENT(T_MATCH);
|
||||||
}
|
}
|
||||||
|
|
||||||
<ST_IN_SCRIPTING>"endswitch" {
|
<ST_IN_SCRIPTING>"endswitch"|"к_перекл" {
|
||||||
RETURN_TOKEN_WITH_IDENT(T_ENDSWITCH);
|
RETURN_TOKEN_WITH_IDENT(T_ENDSWITCH);
|
||||||
}
|
}
|
||||||
|
|
||||||
<ST_IN_SCRIPTING>"case" {
|
<ST_IN_SCRIPTING>"case"|"случай" {
|
||||||
RETURN_TOKEN_WITH_IDENT(T_CASE);
|
RETURN_TOKEN_WITH_IDENT(T_CASE);
|
||||||
}
|
}
|
||||||
|
|
||||||
<ST_IN_SCRIPTING>"default" {
|
<ST_IN_SCRIPTING>"default"|"по_умолч" {
|
||||||
RETURN_TOKEN_WITH_IDENT(T_DEFAULT);
|
RETURN_TOKEN_WITH_IDENT(T_DEFAULT);
|
||||||
}
|
}
|
||||||
|
|
||||||
<ST_IN_SCRIPTING>"break" {
|
<ST_IN_SCRIPTING>"break"|"брейк" {
|
||||||
RETURN_TOKEN_WITH_IDENT(T_BREAK);
|
RETURN_TOKEN_WITH_IDENT(T_BREAK);
|
||||||
}
|
}
|
||||||
|
|
||||||
<ST_IN_SCRIPTING>"continue" {
|
<ST_IN_SCRIPTING>"continue"|"далее" {
|
||||||
RETURN_TOKEN_WITH_IDENT(T_CONTINUE);
|
RETURN_TOKEN_WITH_IDENT(T_CONTINUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
<ST_IN_SCRIPTING>"goto" {
|
<ST_IN_SCRIPTING>"goto"|"переход" {
|
||||||
RETURN_TOKEN_WITH_IDENT(T_GOTO);
|
RETURN_TOKEN_WITH_IDENT(T_GOTO);
|
||||||
}
|
}
|
||||||
|
|
||||||
<ST_IN_SCRIPTING>"echo" {
|
<ST_IN_SCRIPTING>"echo"|"эхо" {
|
||||||
RETURN_TOKEN_WITH_IDENT(T_ECHO);
|
RETURN_TOKEN_WITH_IDENT(T_ECHO);
|
||||||
}
|
}
|
||||||
|
|
||||||
<ST_IN_SCRIPTING>"print" {
|
<ST_IN_SCRIPTING>"print"|"печать" {
|
||||||
RETURN_TOKEN_WITH_IDENT(T_PRINT);
|
RETURN_TOKEN_WITH_IDENT(T_PRINT);
|
||||||
}
|
}
|
||||||
|
|
||||||
<ST_IN_SCRIPTING>"class" {
|
<ST_IN_SCRIPTING>"class"|"класс" {
|
||||||
RETURN_TOKEN_WITH_IDENT(T_CLASS);
|
RETURN_TOKEN_WITH_IDENT(T_CLASS);
|
||||||
}
|
}
|
||||||
|
|
||||||
<ST_IN_SCRIPTING>"interface" {
|
<ST_IN_SCRIPTING>"interface"|"интерфейс" {
|
||||||
RETURN_TOKEN_WITH_IDENT(T_INTERFACE);
|
RETURN_TOKEN_WITH_IDENT(T_INTERFACE);
|
||||||
}
|
}
|
||||||
|
|
||||||
<ST_IN_SCRIPTING>"trait" {
|
<ST_IN_SCRIPTING>"trait"|"примесь" {
|
||||||
RETURN_TOKEN_WITH_IDENT(T_TRAIT);
|
RETURN_TOKEN_WITH_IDENT(T_TRAIT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
<ST_IN_SCRIPTING>"extends"|"расшир" {
|
||||||
|
RETURN_TOKEN_WITH_IDENT(T_EXTENDS);
|
||||||
|
}
|
||||||
|
|
||||||
|
<ST_IN_SCRIPTING>"implements"|"реализ" {
|
||||||
|
RETURN_TOKEN_WITH_IDENT(T_IMPLEMENTS);
|
||||||
|
}
|
||||||
|
|
||||||
|
<ST_IN_SCRIPTING>"abstract"|"абстракт" {
|
||||||
|
RETURN_TOKEN_WITH_IDENT(T_ABSTRACT);
|
||||||
|
}
|
||||||
|
|
||||||
|
<ST_IN_SCRIPTING>"final"|"окончат" {
|
||||||
|
RETURN_TOKEN_WITH_IDENT(T_FINAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
<ST_IN_SCRIPTING>"static"|"статич" {
|
||||||
|
RETURN_TOKEN_WITH_IDENT(T_STATIC);
|
||||||
|
}
|
||||||
|
|
||||||
|
<ST_IN_SCRIPTING>"public"|"публ" {
|
||||||
|
RETURN_TOKEN_WITH_IDENT(T_PUBLIC);
|
||||||
|
}
|
||||||
|
|
||||||
|
<ST_IN_SCRIPTING>"protected"|"защищ" {
|
||||||
|
RETURN_TOKEN_WITH_IDENT(T_PROTECTED);
|
||||||
|
}
|
||||||
|
|
||||||
|
<ST_IN_SCRIPTING>"private"|"приватн" {
|
||||||
|
RETURN_TOKEN_WITH_IDENT(T_PRIVATE);
|
||||||
|
}
|
||||||
|
|
||||||
|
<ST_IN_SCRIPTING>"readonly"|"т_чтение" {
|
||||||
|
RETURN_TOKEN_WITH_IDENT(T_READONLY);
|
||||||
|
}
|
||||||
|
|
||||||
|
<ST_IN_SCRIPTING>"namespace"|"п_имён" {
|
||||||
|
RETURN_TOKEN_WITH_IDENT(T_NAMESPACE);
|
||||||
|
}
|
||||||
|
|
||||||
|
<ST_IN_SCRIPTING>"use"|"использ" {
|
||||||
|
RETURN_TOKEN_WITH_IDENT(T_USE);
|
||||||
|
}
|
||||||
|
|
||||||
|
<ST_IN_SCRIPTING>"insteadof"|"вместоД" {
|
||||||
|
RETURN_TOKEN_WITH_IDENT(T_INSTEADOF);
|
||||||
|
}
|
||||||
|
|
||||||
|
<ST_IN_SCRIPTING>"global"|"глобал" {
|
||||||
|
RETURN_TOKEN_WITH_IDENT(T_GLOBAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
<ST_IN_SCRIPTING>"var"|"перем" {
|
||||||
|
RETURN_TOKEN_WITH_IDENT(T_VAR);
|
||||||
|
}
|
||||||
|
|
||||||
|
<ST_IN_SCRIPTING>"isset"|"устан" {
|
||||||
|
RETURN_TOKEN_WITH_IDENT(T_ISSET);
|
||||||
|
}
|
||||||
|
|
||||||
|
<ST_IN_SCRIPTING>"unset"|"удалить" {
|
||||||
|
RETURN_TOKEN_WITH_IDENT(T_UNSET);
|
||||||
|
}
|
||||||
|
|
||||||
|
<ST_IN_SCRIPTING>"empty"|"пуст" {
|
||||||
|
RETURN_TOKEN_WITH_IDENT(T_EMPTY);
|
||||||
|
}
|
||||||
|
|
||||||
|
<ST_IN_SCRIPTING>"list"|"список" {
|
||||||
|
RETURN_TOKEN_WITH_IDENT(T_LIST);
|
||||||
|
}
|
||||||
|
|
||||||
|
<ST_IN_SCRIPTING>"array"|"массив" {
|
||||||
|
RETURN_TOKEN_WITH_IDENT(T_ARRAY);
|
||||||
|
}
|
||||||
|
|
||||||
|
<ST_IN_SCRIPTING>"callable"|"вызываемый" {
|
||||||
|
RETURN_TOKEN_WITH_IDENT(T_CALLABLE);
|
||||||
|
}
|
||||||
|
|
||||||
|
<ST_IN_SCRIPTING>"clone"|"клон" {
|
||||||
|
RETURN_TOKEN_WITH_IDENT(T_CLONE);
|
||||||
|
}
|
||||||
|
|
||||||
|
<ST_IN_SCRIPTING>"new"|"нов" {
|
||||||
|
RETURN_TOKEN_WITH_IDENT(T_NEW);
|
||||||
|
}
|
||||||
|
|
||||||
|
<ST_IN_SCRIPTING>"attribute"|"атрибут" {
|
||||||
|
RETURN_TOKEN_WITH_IDENT(T_ATTRIBUTE);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The enum keyword must be followed by whitespace and another identifier.
|
* The enum keyword must be followed by whitespace and another identifier.
|
||||||
* This avoids the BC break of using enum in classes, namespaces, functions and constants.
|
* This avoids the BC break of using enum in classes, namespaces, functions and constants.
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue