protected internal override void CheckSemantics(AstHelper astHelper)
        {
            TypeName.CheckSemantics(astHelper);
            Name.CheckSemantics(astHelper);

            _parameter = MAst.Parameter(Type);
        }
        protected internal override void CheckSemantics(AstHelper astHelper)
        {
            TypeName.CheckSemantics(astHelper);

            string result = "#result";

            _inner = new LetInExpression
            {
                VariableDeclarations = new List <VariableDeclarationBase>
                {
                    new VariableDeclarationExpression
                    {
                        VariableName = new MemberIdentifierNode {
                            Name = result
                        },
                        Value = new NewExpression(TypeName.ReferencedType)
                    }
                },
                Body = new ListSemiExpression(from field in Fields
                                              select new AssignExpression
                {
                    Left = new FieldAccessExpression
                    {
                        FieldName = field.FieldName,
                        Target    = new VariableAccessExpression
                        {
                            VariableName = result
                        }
                    },
                    Right = field.Value,
                    Start = field.Start
                })
                {
                    new VariableAccessExpression
                    {
                        VariableName = result
                    }
                }
            };

            _inner.CheckSemantics(astHelper);
        }