Fix bug in chain parsing.
This commit is contained in:
parent
ea3efe654c
commit
733bb07d2d
@ -7,6 +7,7 @@ Version 1.13.0
|
|||||||
Bug fixes
|
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.
|
* `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,
|
op_pos: Position,
|
||||||
) -> ParseResult<Expr> {
|
) -> ParseResult<Expr> {
|
||||||
match (lhs, rhs) {
|
match (lhs, rhs) {
|
||||||
// lhs[idx_expr].rhs
|
// lhs[...][...].rhs
|
||||||
(Expr::Index(mut x, options, pos), rhs) => {
|
(Expr::Index(mut x, options, pos), rhs)
|
||||||
|
if !parent_options.contains(ASTFlags::BREAK) =>
|
||||||
|
{
|
||||||
let options = options | parent_options;
|
let options = options | parent_options;
|
||||||
x.rhs = Self::make_dot_expr(state, x.rhs, rhs, options, op_flags, op_pos)?;
|
x.rhs = Self::make_dot_expr(state, x.rhs, rhs, options, op_flags, op_pos)?;
|
||||||
Ok(Expr::Index(x, ASTFlags::NONE, 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!(
|
assert_eq!(
|
||||||
engine
|
engine
|
||||||
.eval::<Dynamic>(
|
.eval::<Dynamic>(
|
||||||
|
Loading…
Reference in New Issue
Block a user