/// <summary></summary>
        protected virtual void GenerateCompilationUID()
        {
            string NewGuidDigits = Guid.NewGuid().ToString("N", CultureInfo.InvariantCulture) + ":" + "H";

            BaseNode.IIdentifier Operator = NodeHelper.CreateSimpleIdentifier("To UUID");
            BaseNode.IManifestNumberExpression NumberExpression = NodeHelper.CreateSimpleManifestNumberExpression(NewGuidDigits);
            BaseNode.IUnaryOperatorExpression  Expression       = NodeHelper.CreateUnaryOperatorExpression(Operator, NumberExpression);
            CompilationUID = ToCompilerNode <BaseNode.IUnaryOperatorExpression, IUnaryOperatorExpression>(Expression);
        }
Beispiel #2
0
        /// <summary>
        /// Initializes a new instance of the <see cref="QualifiedName"/> class.
        /// </summary>
        /// <param name="source">The pre-constructed source.</param>
        /// <param name="sourceType">The qualified name resolved type.</param>
        public QualifiedName(BaseNode.IQualifiedName source, IExpressionType sourceType)
        {
            Debug.Assert(source.Path.Count == 1);

            BaseNode.IIdentifier Identifier    = source.Path[0];
            IIdentifier          NewIdentifier = new Identifier(Identifier.Text);

            ValidPath.Item = new List <IIdentifier>();
            ValidPath.Item.Add(NewIdentifier);
            ValidResultTypePath.Item = new List <IExpressionType>();
            ValidResultTypePath.Item.Add(sourceType);
        }
        /// <summary></summary>
        protected virtual IInitializedObjectExpression InitializedExpression(string className, string identifierName, BaseNode.IExpression manifestValue)
        {
            BaseNode.IIdentifier ClassIdentifier = NodeHelper.CreateSimpleIdentifier(className);
            BaseNode.IIdentifier FirstIdentifier = NodeHelper.CreateSimpleIdentifier(identifierName);

            BaseNode.IAssignmentArgument FirstArgument = NodeHelper.CreateAssignmentArgument(new List <BaseNode.IIdentifier>()
            {
                FirstIdentifier
            }, manifestValue);
            BaseNode.IInitializedObjectExpression Expression = NodeHelper.CreateInitializedObjectExpression(ClassIdentifier, new List <BaseNode.IAssignmentArgument>()
            {
                FirstArgument
            });

            IInitializedObjectExpression Result = ToCompilerNode <BaseNode.IInitializedObjectExpression, IInitializedObjectExpression>(Expression);

            return(Result);
        }
        /// <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);
        }