viml/parser/expressions: Make $ENV not depend on &isident

This commit is contained in:
ZyX 2017-11-26 16:08:53 +03:00
parent 11a05e778f
commit 17077b6813
3 changed files with 15 additions and 9 deletions

View File

@ -983,7 +983,7 @@ typedef kvec_withinit_t(ExprASTConvStackItem, 16) ExprASTConvStack;
/// "DoubleQuotedString" nodes.
Dictionary nvim_parse_expression(String expr, String flags, Boolean highlight,
Error *err)
FUNC_API_SINCE(4)
FUNC_API_SINCE(4) FUNC_API_ASYNC
{
int pflags = 0;
for (size_t i = 0 ; i < flags.size ; i++) {

View File

@ -47,6 +47,8 @@
// type of what is in the first expression is generally not known when
// parsing, so to have separate expressions like this separate them with
// spaces.
// 7. 'isident' no longer applies to environment variables, they always include
// ASCII alphanumeric characters and underscore and nothing except this.
#include <stdbool.h>
#include <stddef.h>
@ -383,10 +385,14 @@ LexExprToken viml_pexpr_next_token(ParserState *const pstate, const int flags)
break;
}
#define ISWORD_OR_AUTOLOAD(x) \
(ASCII_ISALNUM(x) || (x) == AUTOLOAD_CHAR || (x) == '_')
#define ISWORD(x) \
(ASCII_ISALNUM(x) || (x) == '_')
// Environment variable.
case '$': {
// FIXME: Parser function cant be thread-safe with vim_isIDc.
CHARREG(kExprLexEnv, vim_isIDc);
CHARREG(kExprLexEnv, ISWORD);
break;
}
@ -400,10 +406,6 @@ LexExprToken viml_pexpr_next_token(ParserState *const pstate, const int flags)
case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U':
case 'V': case 'W': case 'X': case 'Y': case 'Z':
case '_': {
#define ISWORD_OR_AUTOLOAD(x) \
(ASCII_ISALNUM(x) || (x) == AUTOLOAD_CHAR || (x) == '_')
#define ISWORD(x) \
(ASCII_ISALNUM(x) || (x) == '_')
ret.data.var.scope = 0;
ret.data.var.autoload = false;
CHARREG(kExprLexPlainIdentifier, ISWORD);
@ -441,9 +443,10 @@ LexExprToken viml_pexpr_next_token(ParserState *const pstate, const int flags)
CHARREG(kExprLexPlainIdentifier, ISWORD_OR_AUTOLOAD);
}
break;
#undef ISWORD_OR_AUTOLOAD
#undef ISWORD
}
#undef ISWORD
#undef ISWORD_OR_AUTOLOAD
#undef CHARREG
// Option.

View File

@ -717,6 +717,9 @@ describe('api', function()
end)
describe('nvim_parse_expression', function()
before_each(function()
meths.set_option('isident', '')
end)
local function simplify_east_api_node(line, east_api_node)
if east_api_node == NIL then
return nil