コード例 #1
0
        public JsNode VisitVariableInitializer(VariableInitializer node)
        {
            var tLocal = node.Annotation <LocalResolveResult>();

            if (tLocal != null && tLocal.Type != null && tLocal.Type.Kind == TypeKind.Struct &&
                node.ToString() == node.NameToken.ToString() && node.NextSibling.ToString() == ";")
            {
                var tType = Type.GetType(tLocal.Type.FullName);
                //对于基本数据类型,不用new
                if (tType == null || !tType.IsPrimitive)
                {
                    var tTypeMember = new JsMemberExpression {
                        Name = tLocal.Type.FullName
                    };
                    var tCtorMember = new JsMemberExpression {
                        Name = "ctor", PreviousMember = tTypeMember
                    };
                    var tInvocation = new JsInvocationExpression {
                        Member = tCtorMember
                    };
                    var tNewObject = new JsNewObjectExpression {
                        Invocation = tInvocation
                    };
                    return(new JsVariableDeclarator
                    {
                        Name = node.Name,
                        Initializer = tNewObject,
                    });
                }
            }
            return(new JsVariableDeclarator {
                Name = node.Name, Initializer = VisitExpression(node.Initializer)
            });
        }