Skip to content

Commit 52d887c

Browse files
authored
Merge pull request #21 from santisq/20-add-support-for-subexpressions-with-using-statements
add support for member accessing using statement
2 parents 4abe4cc + f046a82 commit 52d887c

File tree

2 files changed

+29
-3
lines changed

2 files changed

+29
-3
lines changed

Module/private/InvocationManager.ps1

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -137,9 +137,25 @@ class InvocationManager : IDisposable {
137137
$value))
138138
}
139139

140-
if ($usingstatement.SubExpression -is [IndexExpressionAst]) {
141-
$idx = $usingstatement.SubExpression.Index.SafeGetValue()
142-
$value = $value[$idx]
140+
if ($usingstatement.SubExpression -isnot [VariableExpressionAst]) {
141+
[Stack[Ast]] $subexpressionStack = $usingstatement.SubExpression.FindAll({
142+
$args[0] -is [IndexExpressionAst] -or
143+
$args[0] -is [MemberExpressionAst] },
144+
$false)
145+
146+
while ($subexpressionStack.Count) {
147+
$subexpression = $subexpressionStack.Pop()
148+
if ($subexpression -is [IndexExpressionAst]) {
149+
$idx = $subexpression.Index.SafeGetValue()
150+
$value = $value[$idx]
151+
continue
152+
}
153+
154+
if ($subexpression -is [MemberExpressionAst]) {
155+
$member = $subexpression.Member.SafeGetValue()
156+
$value = $value.$member
157+
}
158+
}
143159
}
144160

145161
$usingParams.Add($key, $value)

tests/PSParallelPipeline.tests.ps1

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,5 +140,15 @@
140140
1 | Invoke-Parallel { $using:arr[-1] } | Should -BeExactly 10
141141
1 | Invoke-Parallel { $using:hash['FOO'] } | Should -BeExactly 'bar'
142142
}
143+
144+
It 'Allows member accessing on using: statemets' {
145+
$hash = @{
146+
foo = @{
147+
bar = [pscustomobject]@{ Index = 0..10 }
148+
}
149+
}
150+
151+
1 | Invoke-Parallel { $using:hash['foo']['bar'].Index[5] } | Should -BeExactly 5
152+
}
143153
}
144154
}

0 commit comments

Comments
 (0)