예제 #1
0
        public override CodeObject VisitProbeDeclaration(VclLangParser.ProbeDeclarationContext context)
        {
            var name = context.Identifier().GetText();

            if (CompilerContext.ProbeReferences.ContainsKey(name))
            {
                throw new ArgumentException("Probe name is not unique");
            }

            // Determine field name
            var fieldName = name.SafeIdentifier("_probe");

            // Setup current probe object and add to probe mapper
            CurrentProbeExpression = new CodeFieldReferenceExpression(
                new CodeThisReferenceExpression(), fieldName);
            CompilerContext.ProbeReferences.Add(name, (CodeFieldReferenceExpression)CurrentProbeExpression);

            // Create field and add to handler class
            CompilerContext.HandlerClass.Members.Add(
                new CodeMemberField(typeof(VclProbe), fieldName)
            {
                Attributes     = MemberAttributes.Private,
                InitExpression =
                    new CodeObjectCreateExpression(
                        typeof(VclProbe),
                        new CodePrimitiveExpression(name))
            });

            base.VisitProbeDeclaration(context);

            CurrentProbeExpression = null;
            return(null);
        }
 public override CodeObject VisitProbeDeclaration(VclLangParser.ProbeDeclarationContext context)
 {
     // Named probe declarations are already handled elsewhere
     return(null);
 }