private void ProcessClassReplicates(IClass parentClass, IWalkCallbacks <ReplicationContext> callbacks, ReplicationContext context)
        {
            BaseNode.IBlockList ClassReplicateBlocks = (BaseNode.IBlockList)parentClass.ClassReplicateBlocks;

            List <BaseNode.INode> ReplicatedNodeList = new List <BaseNode.INode>();

            if (ReplicateBlockList(ClassReplicateBlocks, ReplicatedNodeList, callbacks, context))
            {
                parentClass.FillReplicatedList(nameof(IClass.ClassReplicateBlocks), ReplicatedNodeList);

                List <ICompiledReplicate> ReplicateList = new List <ICompiledReplicate>();
                foreach (BaseNode.INode Node in ReplicatedNodeList)
                {
                    IClassReplicate ReplicateItem = Node as IClassReplicate;
                    Debug.Assert(ReplicateItem != null);

                    ReplicateList.Add(ReplicateItem);
                }

                context.ReplicateTable.Clear();
                foreach (KeyValuePair <string, List <string> > Entry in context.GlobalReplicateTable)
                {
                    context.ReplicateTable.Add(Entry.Key, Entry.Value);
                }

                CheckReplicates(ReplicateList, context);
            }
        }
 private bool OnNodeIgnoreReplicates(BaseNode.INode node, BaseNode.INode parentNode, string propertyName, IWalkCallbacks <ReplicationContext> callbacks, ReplicationContext context)
 {
     if (node is IGlobalReplicate)
     {
         return(true);
     }
     else if (node is IRoot AsRoot)
     {
         ProcessGlobalReplicates(AsRoot, context);
         return(ErrorList.IsEmpty);
     }
     else if (node is IClass AsClass)
     {
         ProcessClassReplicates(AsClass, callbacks, context);
         return(ErrorList.IsEmpty);
     }
     else
     {
         return(parentNode == null || NodeTreeWalk.Walk <ReplicationContext>(node, callbacks, context));
     }
 }
        /// <summary></summary>
        public bool ReplacePhase1Macro(BaseNode.INode node, BaseNode.INode parentNode, string propertyName, IWalkCallbacks <ReplacePhase1MacroContext> callbacks, ReplacePhase1MacroContext context)
        {
            bool Result = true;

            if (node is IClass AsClass)
            {
                context.CurrentClass = AsClass;
            }
            else if (node is ILibrary || node is IGlobalReplicate)
            {
                context.CurrentClass = null;
            }
            else if (node is IPreprocessorExpression AsPreprocessorExpression)
            {
                bool IsHandled = false;

                switch (AsPreprocessorExpression.Value)
                {
                case BaseNode.PreprocessorMacro.DateAndTime:
                    NodeTreeHelperChild.SetChildNode(parentNode, propertyName, CompilationDateTime);
                    IsHandled = true;
                    break;

                case BaseNode.PreprocessorMacro.CompilationDiscreteIdentifier:
                    NodeTreeHelperChild.SetChildNode(parentNode, propertyName, CompilationUID);
                    IsHandled = true;
                    break;

                case BaseNode.PreprocessorMacro.CompilerVersion:
                    NodeTreeHelperChild.SetChildNode(parentNode, propertyName, CompilerVersion);
                    IsHandled = true;
                    break;

                case BaseNode.PreprocessorMacro.ConformanceToStandard:
                    NodeTreeHelperChild.SetChildNode(parentNode, propertyName, ConformanceToStandard);
                    IsHandled = true;
                    break;

                case BaseNode.PreprocessorMacro.DiscreteClassIdentifier:
                    Debug.Assert(context.CurrentClass != null);

                    string GlassGuidDigits        = context.CurrentClass.ClassGuid.ToString("N", CultureInfo.InvariantCulture) + ":" + "H";
                    BaseNode.IIdentifier Operator = NodeHelper.CreateSimpleIdentifier("To UUID");
                    BaseNode.IManifestNumberExpression NumberExpression = NodeHelper.CreateSimpleManifestNumberExpression(GlassGuidDigits);
                    BaseNode.IUnaryOperatorExpression  Expression       = NodeHelper.CreateUnaryOperatorExpression(Operator, NumberExpression);
                    IExpression ReplacementNode = ToCompilerNode <BaseNode.IUnaryOperatorExpression, IUnaryOperatorExpression>(Expression);

                    NodeTreeHelperChild.SetChildNode(parentNode, propertyName, ReplacementNode);
                    IsHandled = true;
                    break;

                case BaseNode.PreprocessorMacro.Debugging:
                    NodeTreeHelperChild.SetChildNode(parentNode, propertyName, Debugging);
                    IsHandled = true;
                    break;

                // Processed in phase 2.
                case BaseNode.PreprocessorMacro.ClassPath:
                case BaseNode.PreprocessorMacro.Counter:
                case BaseNode.PreprocessorMacro.RandomInteger:
                    IsHandled = true;
                    break;
                }

                Debug.Assert(IsHandled);
            }

            return(Result);
        }
Exemplo n.º 4
0
        /// <summary></summary>
        protected virtual bool SealAllScopes(BaseNode.INode node, BaseNode.INode parentNode, string propertyName, IWalkCallbacks <object> callbacks, object context)
        {
            ISource Source = node as ISource;

            Debug.Assert(Source != null);

            if (Scope.IsScopeHolder(Source))
            {
                IScopeHolder ScopeHolder = Source as IScopeHolder;
                Debug.Assert(ScopeHolder != null);

                ScopeHolder.FullScope.Seal();
            }

            return(true);
        }
Exemplo n.º 5
0
        /// <summary></summary>
        protected virtual bool ListAllSources(BaseNode.INode node, BaseNode.INode parentNode, string propertyName, IWalkCallbacks <BuildInferenceSourceList> callbacks, BuildInferenceSourceList context)
        {
            ISource Source = node as ISource;

            Debug.Assert(Source != null);

            Source.Reset(context.RuleTemplateList);

#if COVERAGE
            Debug.Assert(!Source.IsResolved(context.RuleTemplateList));
            Debug.Assert(Source.ToString().Length > 0);
#endif

            foreach (IRuleTemplate RuleTemplate in context.RuleTemplateList)
            {
                if (RuleTemplate.NodeType.IsAssignableFrom(Source.GetType()))
                {
                    context.SourceList.Add(Source);
                    break;
                }
            }

            return(true);
        }
Exemplo n.º 6
0
        /// <summary></summary>
        public static bool InitializeSource(BaseNode.INode node, BaseNode.INode parentNode, string propertyName, IWalkCallbacks <object> callbacks, object context)
        {
            bool Result = true;

            if (node is ISource AsSource)
            {
                ISource ParentSource = parentNode as ISource;
                AsSource.InitializeSource(ParentSource);
            }

#if DEBUG
            string DebugString = node.ToString();

            if (node is ICompiledFeature AsFeature)
            {
                bool IsDeferredFeature = AsFeature.IsDeferredFeature;
                bool HasExternBody     = AsFeature.HasExternBody;
                bool HasPrecursorBody  = AsFeature.HasPrecursorBody;
            }
#endif
            return(Result);
        }