Fix bug in chain parsing.
This commit is contained in:
parent
ea3efe654c
commit
733bb07d2d
@ -7,6 +7,7 @@ Version 1.13.0
|
||||
Bug fixes
|
||||
---------
|
||||
|
||||
* Complex indexing/dotting chains now parse correctly, for example: `a[b][c[d]].e`
|
||||
* `map` and `filter` for arrays are marked `pure`. Warnings are added to the documentation of pure array methods that take `this` closures.
|
||||
|
||||
|
||||
|
@ -2102,8 +2102,10 @@ impl Engine {
|
||||
op_pos: Position,
|
||||
) -> ParseResult<Expr> {
|
||||
match (lhs, rhs) {
|
||||
// lhs[idx_expr].rhs
|
||||
(Expr::Index(mut x, options, pos), rhs) => {
|
||||
// lhs[...][...].rhs
|
||||
(Expr::Index(mut x, options, pos), rhs)
|
||||
if !parent_options.contains(ASTFlags::BREAK) =>
|
||||
{
|
||||
let options = options | parent_options;
|
||||
x.rhs = Self::make_dot_expr(state, x.rhs, rhs, options, op_flags, op_pos)?;
|
||||
Ok(Expr::Index(x, ASTFlags::NONE, pos))
|
||||
|
@ -133,6 +133,20 @@ fn test_arrays() -> Result<(), Box<EvalAltResult>> {
|
||||
);
|
||||
}
|
||||
|
||||
#[cfg(not(feature = "no_object"))]
|
||||
assert_eq!(
|
||||
engine.eval::<INT>(
|
||||
"
|
||||
let x = #{ foo: 42 };
|
||||
let n = 0;
|
||||
let a = [[x]];
|
||||
let i = [n];
|
||||
a[n][i[n]].foo
|
||||
"
|
||||
)?,
|
||||
42
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
engine
|
||||
.eval::<Dynamic>(
|
||||
|
Loading…
Reference in New Issue
Block a user