aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorZyX <kp-pav@yandex.ru>2017-10-01 15:54:46 +0300
committerZyX <kp-pav@yandex.ru>2017-10-15 19:13:48 +0300
commit3735537a508c5690c4622ebe450e6f3f15706670 (patch)
tree75775202ef260fa88c873c231ab42da74c4edc76 /src
parentf33543377e39fc62ab063ca57c716984fb07aea1 (diff)
downloadrneovim-3735537a508c5690c4622ebe450e6f3f15706670.tar.gz
rneovim-3735537a508c5690c4622ebe450e6f3f15706670.tar.bz2
rneovim-3735537a508c5690c4622ebe450e6f3f15706670.zip
viml/parser/expressions: Fix call inside nested parenthesis
It may have incorrectly tried to call everything because of essentially “value” nodes being treated as not such.
Diffstat (limited to 'src')
-rw-r--r--src/nvim/viml/parser/expressions.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/src/nvim/viml/parser/expressions.c b/src/nvim/viml/parser/expressions.c
index fc64fee140..1713d0c89f 100644
--- a/src/nvim/viml/parser/expressions.c
+++ b/src/nvim/viml/parser/expressions.c
@@ -612,6 +612,7 @@ viml_pexpr_repr_token_end:
#ifdef UNIT_TESTING
#include <stdio.h>
+
REAL_FATTR_UNUSED
static inline void viml_pexpr_debug_print_ast_node(
const ExprASTNode *const *const eastnode_p,
@@ -626,6 +627,7 @@ static inline void viml_pexpr_debug_print_ast_node(
(*eastnode_p)->start.col, (*eastnode_p)->len);
}
}
+
REAL_FATTR_UNUSED
static inline void viml_pexpr_debug_print_ast_stack(
const ExprASTStack *const ast_stack,
@@ -640,6 +642,7 @@ static inline void viml_pexpr_debug_print_ast_stack(
}
}
+REAL_FATTR_UNUSED
static inline void viml_pexpr_debug_print_token(
const ParserState *const pstate, const LexExprToken token)
FUNC_ATTR_ALWAYS_INLINE
@@ -794,6 +797,7 @@ static inline ExprASTNode *viml_pexpr_new_node(const ExprASTNodeType type)
typedef enum {
kEOpLvlInvalid = 0,
+ kEOpLvlComplexIdentifier,
kEOpLvlParens,
kEOpLvlArrow,
kEOpLvlComma,
@@ -806,7 +810,6 @@ typedef enum {
kEOpLvlMultiplication, ///< Multiplication, division and modulo.
kEOpLvlUnary, ///< Unary operations: not, minus, plus.
kEOpLvlSubscript, ///< Subscripts.
- kEOpLvlComplexIdentifier, ///< Plain identifier, curly braces name.
kEOpLvlValue, ///< Values: literals, variables, nested expressions, …
} ExprOpLvl;
@@ -843,10 +846,10 @@ static const ExprOpLvl node_type_to_op_lvl[] = {
[kExprNodeSubscript] = kEOpLvlSubscript,
- [kExprNodeComplexIdentifier] = kEOpLvlComplexIdentifier,
- [kExprNodePlainIdentifier] = kEOpLvlComplexIdentifier,
[kExprNodeCurlyBracesIdentifier] = kEOpLvlComplexIdentifier,
+ [kExprNodeComplexIdentifier] = kEOpLvlValue,
+ [kExprNodePlainIdentifier] = kEOpLvlValue,
[kExprNodeRegister] = kEOpLvlValue,
[kExprNodeListLiteral] = kEOpLvlValue,
};
@@ -884,10 +887,10 @@ static const ExprOpAssociativity node_type_to_op_ass[] = {
[kExprNodeSubscript] = kEOpAssLeft,
- [kExprNodePlainIdentifier] = kEOpAssLeft,
- [kExprNodeComplexIdentifier] = kEOpAssLeft,
[kExprNodeCurlyBracesIdentifier] = kEOpAssLeft,
+ [kExprNodeComplexIdentifier] = kEOpAssLeft,
+ [kExprNodePlainIdentifier] = kEOpAssNo,
[kExprNodeRegister] = kEOpAssNo,
[kExprNodeListLiteral] = kEOpAssNo,
};