public SyntaxParenthesizedExpression(Token left, SyntaxExpression expression, Token right)
 {
     LeftParenthesizedToken  = left;
     Expression              = expression;
     RightParenthesizedToken = right;
 }
Esempio n. 2
0
 public SyntaxBinaryExpression(SyntaxExpression left, Token @operator, SyntaxExpression right)
 {
     Left     = left;
     Operator = @operator;
     Right    = right;
 }
Esempio n. 3
0
 public SyntaxUnaryExpression(Token @operator, SyntaxExpression operand)
 {
     Operator = @operator;
     Operand  = operand;
 }
Esempio n. 4
0
        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());
        }