Skip to content

Commit 1772ad9

Browse files
author
Quoc Truong
committed
Add comment for getinvokememberexpressionast method in Helper
1 parent 214e7cd commit 1772ad9

File tree

2 files changed

+22
-8
lines changed

2 files changed

+22
-8
lines changed

Engine/Helper.cs

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -470,7 +470,7 @@ public string GetTypeFromReturnStatementAst(Ast funcAst, ReturnStatementAst ret,
470470
}
471471
else if (cmAst.Expression is MemberExpressionAst)
472472
{
473-
result = GetTypeFromMemberExpressionAstHelper(cmAst.Expression as MemberExpressionAst, funcAst, classes);
473+
result = GetTypeFromMemberExpressionAst(cmAst.Expression as MemberExpressionAst, funcAst, classes);
474474
}
475475
}
476476
}
@@ -484,7 +484,16 @@ public string GetTypeFromReturnStatementAst(Ast funcAst, ReturnStatementAst ret,
484484
return result;
485485
}
486486

487-
internal string GetTypeFromMemberExpressionAstHelper(MemberExpressionAst memberAst, Ast scopeAst, IEnumerable<TypeDefinitionAst> classes)
487+
/// <summary>
488+
/// Returns the type from member expression ast, which is inside scopeAst.
489+
/// This function assumes that Initialize Variable Analysis is already run on scopeAst.
490+
/// Classes represent the list of DSC classes in the script.
491+
/// </summary>
492+
/// <param name="memberAst"></param>
493+
/// <param name="scopeAst"></param>
494+
/// <param name="classes"></param>
495+
/// <returns></returns>
496+
public string GetTypeFromMemberExpressionAst(MemberExpressionAst memberAst, Ast scopeAst, IEnumerable<TypeDefinitionAst> classes)
488497
{
489498
if (memberAst == null)
490499
{
@@ -497,28 +506,33 @@ internal string GetTypeFromMemberExpressionAstHelper(MemberExpressionAst memberA
497506
if (memberAst.Expression is VariableExpressionAst && VariableAnalysisDictionary.ContainsKey(scopeAst))
498507
{
499508
VariableAnalysis VarTypeAnalysis = VariableAnalysisDictionary[scopeAst];
509+
// Get the analysis detail for the variable
500510
details = VarTypeAnalysis.GetVariableAnalysis(memberAst.Expression as VariableExpressionAst);
501511

502512
if (details != null && classes != null)
503513
{
514+
// Get the class that corresponds to the name of the type (if possible)
504515
psClass = classes.FirstOrDefault(item => String.Equals(item.Name, details.Type.FullName, StringComparison.OrdinalIgnoreCase));
505516
}
506517
}
507518

508-
return GetTypeFromMemberExpressionAst(memberAst, psClass, details);
519+
return GetTypeFromMemberExpressionAstHelper(memberAst, psClass, details);
509520
}
510521

511522
/// <summary>
512-
/// Retrieves the type from member expression ast
523+
/// Retrieves the type from member expression ast. psClass is the powershell class
524+
/// that represents the type of the object being invoked on (psClass may be null too).
513525
/// </summary>
514526
/// <param name="memberAst"></param>
515527
/// <param name="psClass"></param>
516528
/// <param name="analysisDetails"></param>
517529
/// <returns></returns>
518-
public string GetTypeFromMemberExpressionAst(MemberExpressionAst memberAst, TypeDefinitionAst psClass, VariableAnalysisDetails analysisDetails)
530+
internal string GetTypeFromMemberExpressionAstHelper(MemberExpressionAst memberAst, TypeDefinitionAst psClass, VariableAnalysisDetails analysisDetails)
519531
{
532+
//Try to get the type without using psClass first
520533
Type result = AssignmentTarget.GetTypeFromMemberExpressionAst(memberAst);
521534

535+
//If we can't get the type, then it may be that the type of the object being invoked on is a powershell class
522536
if (result == null && psClass != null && analysisDetails != null)
523537
{
524538
result = AssignmentTarget.GetTypeFromMemberExpressionAst(memberAst, analysisDetails, psClass);
@@ -1131,7 +1145,7 @@ public object VisitReturnStatement(ReturnStatementAst returnStatementAst)
11311145
/// <returns></returns>
11321146
public object VisitMemberExpression(MemberExpressionAst memAst)
11331147
{
1134-
return Helper.Instance.GetTypeFromMemberExpressionAstHelper(memAst, myFunction, classes);
1148+
return Helper.Instance.GetTypeFromMemberExpressionAst(memAst, myFunction, classes);
11351149
}
11361150

11371151
/// <summary>
@@ -1141,7 +1155,7 @@ public object VisitMemberExpression(MemberExpressionAst memAst)
11411155
/// <returns></returns>
11421156
public object VisitInvokeMemberExpression(InvokeMemberExpressionAst invokeAst)
11431157
{
1144-
return Helper.Instance.GetTypeFromMemberExpressionAstHelper(invokeAst, myFunction, classes);
1158+
return Helper.Instance.GetTypeFromMemberExpressionAst(invokeAst, myFunction, classes);
11451159
}
11461160

11471161
/// <summary>

Engine/VariableAnalysisBase.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1205,7 +1205,7 @@ public AssignmentTarget(AssignmentStatementAst ast)
12051205
_rightHandSideVariable = new VariableTarget(cmExAst.Expression as VariableExpressionAst);
12061206
if (String.Equals((exprAst as VariableExpressionAst).VariablePath.UserPath, "this", StringComparison.OrdinalIgnoreCase))
12071207
{
1208-
1208+
Constant = SpecialVars.ThisVariable;
12091209
}
12101210
}
12111211
//Store the type info for variable assignment from .Net type

0 commit comments

Comments
 (0)