public SyntaxParenthesizedExpression(Token left, SyntaxExpression expression, Token right) { LeftParenthesizedToken = left; Expression = expression; RightParenthesizedToken = right; }
public SyntaxBinaryExpression(SyntaxExpression left, Token @operator, SyntaxExpression right) { Left = left; Operator = @operator; Right = right; }
public SyntaxUnaryExpression(Token @operator, SyntaxExpression operand) { Operator = @operator; Operand = operand; }
private SyntaxStatementLet[] TransformDestructuringLetStatement(Context context, SyntaxDestructuringPattern pattern, SyntaxExpression value) { var letName = context.GenerateVariableName(); var letValue = Transform(context, value).FirstOrDefault() as SyntaxExpression; var newLetNode = new SyntaxStatementLetDeclarator().WithDeclarator(new SyntaxTypeDeclarator().WithName(letName)).WithExpression(letValue); var members = new List <SyntaxStatementLet>() { newLetNode }; switch (pattern) { case SyntaxDestructuringArrayPattern arrayPattern: { int index = 0; foreach (var alias in arrayPattern.Aliases) { alias .IfLeft(name => members.Add( new SyntaxStatementLetDeclarator() .WithDeclarator(new SyntaxTypeDeclarator() .WithName(name)) .WithExpression(new SyntaxExpressionMember() .WithCallee(new SyntaxExpressionLiteralIdentifier().WithName(letName)) .WithIndex(new SyntaxExpressionLiteralDouble().WithValue(index))))); alias .IfRight(innerPattern => members.AddRange( TransformDestructuringLetStatement(context, innerPattern, new SyntaxExpressionMember() .WithCallee(new SyntaxExpressionLiteralIdentifier().WithName(letName)) .WithIndex(new SyntaxExpressionLiteralDouble().WithValue(index))))); index += 1; } break; } case SyntaxDestructuringObjectPattern objectPattern: { foreach (var binding in objectPattern.BindingElements) { binding.Alias .IfLeft(name => members.Add( new SyntaxStatementLetDeclarator() .WithDeclarator(new SyntaxTypeDeclarator().WithName(name)) .WithExpression(new SyntaxExpressionProperty() .WithLeft(new SyntaxExpressionLiteralIdentifier() .WithName(letName)) .WithName(binding.Property)))); binding.Alias .IfRight(innerPattern => members.AddRange( TransformDestructuringLetStatement(context, innerPattern, new SyntaxExpressionProperty() .WithLeft(new SyntaxExpressionLiteralIdentifier() .WithName(letName)) .WithName(binding.Property)))); if (binding.Alias.IsBottom) { members.Add( new SyntaxStatementLetDeclarator() .WithDeclarator(new SyntaxTypeDeclarator().WithName(binding.Property)) .WithExpression(new SyntaxExpressionProperty() .WithLeft(new SyntaxExpressionLiteralIdentifier() .WithName(letName)) .WithName(binding.Property))); } } break; } case SyntaxDestructuringTuplePatternNode tuplePattern: { int index = 0; foreach (var alias in tuplePattern.Aliases) { alias .IfLeft(name => members.Add( new SyntaxStatementLetDeclarator() .WithDeclarator(new SyntaxTypeDeclarator() .WithName(name)) .WithExpression(new SyntaxExpressionMember() .WithCallee(new SyntaxExpressionLiteralIdentifier().WithName(letName)) .WithIndex(new SyntaxExpressionLiteralDouble().WithValue(index))))); alias .IfRight(innerPattern => members.AddRange( TransformDestructuringLetStatement(context, innerPattern, new SyntaxExpressionMember() .WithCallee(new SyntaxExpressionLiteralIdentifier().WithName(letName)) .WithIndex(new SyntaxExpressionLiteralDouble().WithValue(index))))); index += 1; } break; } } return(members.ToArray()); }