Exemplo n.º 1
0
        public virtual Statement EmitHeader()
        {
            CreateOperatorStatement statement = (CreateOperatorStatement)EmitStatement(EmitMode.ForCopy);

            statement.Block.ClassDefinition = null;
            statement.Block.Block           = null;
            statement.MetaData = null;
            return(statement);
        }
Exemplo n.º 2
0
        public override Statement EmitStatement(EmitMode mode)
        {
            if (mode == EmitMode.ForStorage)
            {
                SaveObjectID();
                SaveGeneratorID();
                SaveLocator();
            }
            else
            {
                RemoveObjectID();
                RemoveGeneratorID();
                RemoveLocator();
            }
            try
            {
                IMetaData result;
                if ((mode != EmitMode.ForRemote) && (_declarationText != null))
                {
                    SourceStatement statement = new SourceStatement();
                    statement.Source = _declarationText + _bodyText;
                    result           = statement;
                }
                else
                {
                    CreateOperatorStatement statement = new CreateOperatorStatement();
                    statement.OperatorName = Schema.Object.EnsureRooted(OperatorName);
                    foreach (Operand operand in Operands)
                    {
                        FormalParameter formalParameter = new FormalParameter();
                        formalParameter.Identifier    = operand.Name;
                        formalParameter.TypeSpecifier = operand.DataType.EmitSpecifier(mode);
                        formalParameter.Modifier      = operand.Modifier;
                        statement.FormalParameters.Add(formalParameter);
                    }
                    if (ReturnDataType != null)
                    {
                        statement.ReturnType = ReturnDataType.EmitSpecifier(mode);
                    }
                                        #if USEVIRTUAL
                    statement.IsVirtual      = IsVirtual;
                    statement.IsAbstract     = IsAbstract;
                    statement.IsOverride     = IsOverride;
                    statement.IsReintroduced = IsReintroduced;
                                        #endif
                    if ((mode == EmitMode.ForRemote) && !IsRemotable)
                    {
                        statement.Block.Block = new Block();
                    }
                    else
                    {
                        Block.EmitStatement(mode, statement.Block);
                    }
                    result = statement;
                }

                result.MetaData = MetaData == null ? null : MetaData.Copy();

                if (SessionObjectName != null)
                {
                    if (result.MetaData == null)
                    {
                        result.MetaData = new MetaData();
                    }
                    result.MetaData.Tags.AddOrUpdate("DAE.GlobalObjectName", OperatorName, true);
                }
                return((Statement)result);
            }
            finally
            {
                if (mode == EmitMode.ForStorage)
                {
                    RemoveObjectID();
                    RemoveGeneratorID();
                    RemoveLocator();
                }
            }
        }