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