Beispiel #1
0
        protected override string ComputeNameForDecl(IPDecl decl)
        {
            string name = decl.Name;

            switch (decl)
            {
            case PEvent pEvent:
                if (pEvent.IsNullEvent)
                {
                    name = "DefaultEvent";
                }

                if (pEvent.IsHaltEvent)
                {
                    name = "PHalt";
                }

                return(name);

            case Interface _:
                return("I_" + name);

            default:
                name = string.IsNullOrEmpty(name) ? "Anon" : name;
                if (name.StartsWith("$"))
                {
                    name = "TMP_" + name.Substring(1);
                }

                return(UniquifyName(name));
            }
        }
Beispiel #2
0
        protected override string ComputeNameForDecl(IPDecl decl)
        {
            string name = decl.Name;

            //Handle null and halt events separately
#pragma warning disable CCN0002 // Non exhaustive patterns in switch block
            switch (decl)
            {
            case PEvent pEvent:
                if (pEvent.IsNullEvent)
                {
                    name = "DefaultEvent";
                }

                if (pEvent.IsHaltEvent)
                {
                    name = "PHalt";
                }

                return(name);

            case Interface _:
                return("I_" + name);
            }
#pragma warning restore CCN0002 // Non exhaustive patterns in switch block

            name = string.IsNullOrEmpty(name) ? "Anon" : name;
            if (name.StartsWith("$"))
            {
                name = "TMP_" + name.Substring(1);
            }

            return(UniquifyName(name));
        }
Beispiel #3
0
        protected override string ComputeNameForDecl(IPDecl decl)
        {
            string enumName = "";

#pragma warning disable CCN0002 // Non exhaustive patterns in switch block
            switch (decl)
            {
            case EnumElem enumElem:
                enumName = $"{enumElem.ParentEnum.Name}_";
                break;

            case PEvent pEvent:
                if (pEvent.IsNullEvent)
                {
                    return("_P_EVENT_NULL_STRUCT");
                }

                if (pEvent.IsHaltEvent)
                {
                    return("_P_EVENT_HALT_STRUCT");
                }

                break;

            case Implementation impl:
                return($"P_GEND_IMPL_{impl.Name}");
            }
#pragma warning restore CCN0002 // Non exhaustive patterns in switch block

            if (DeclNameParts.TryGetValue(decl.GetType(), out string declTypePart))
            {
                declTypePart += "_";
            }
            else
            {
                declTypePart = "";
            }

            string name = decl.Name;
            if (decl is State state)
            {
                name = state.QualifiedName;
            }

            name = string.IsNullOrEmpty(name) ? "Anon" : name;
            name = name.Replace('.', '_');

            if (name.StartsWith("$"))
            {
                name = "PTMP_" + name.Substring(1);
            }
            else
            {
                name = NamePrefix + declTypePart + enumName + name;
            }

            return(UniquifyName(name));
        }
Beispiel #4
0
        private void CheckConflicts(IPDecl decl, params TableReader[] namespaces)
        {
            IPDecl existingDecl = null;

            if (namespaces.Any(table => table(decl.Name, out existingDecl)))
            {
                throw handler.DuplicateDeclaration(decl.SourceLocation, decl, existingDecl);
            }
        }
Beispiel #5
0
        protected override void WriteDeclRef(IPDecl decl)
        {
            var name = decl.Name;

            if (decl is State state)
            {
                name = state.QualifiedName;
            }
            WriteParts(name);
        }
Beispiel #6
0
        private string SetNameForNode(IPDecl node, string name)
        {
            if (declNames.TryGetValue(node, out string existing))
            {
                throw new ArgumentException($"Decl {node.Name} already has name {existing}", nameof(node));
            }

            declNames.Add(node, name);
            return(name);
        }
Beispiel #7
0
        public string GetNameForDecl(IPDecl decl)
        {
            Contract.Requires(decl != null);

            if (TryGetNameForNode(decl, out string name))
            {
                return(name);
            }

            string declName = ComputeNameForDecl(decl);

            return(SetNameForNode(decl, declName));
        }
Beispiel #8
0
 public Exception DuplicateDeclaration(ParserRuleContext location, IPDecl duplicate, IPDecl existing)
 {
     return(IssueError(location,
                       $"'{duplicate.Name}' duplicates declaration '{existing.Name}' at {locationResolver.GetLocation(existing.SourceLocation)}"));
 }
Beispiel #9
0
 private string DeclarationName(IPDecl method)
 {
     return(method.Name.Length > 0 ? method.Name : $"at {locationResolver.GetLocation(method.SourceLocation)}");
 }
Beispiel #10
0
 protected override void WriteDecl(IPDecl decl)
 {
     WriteTree(decl);
 }
Beispiel #11
0
 private bool TryGetNameForNode(IPDecl node, out string name)
 {
     return(declNames.TryGetValue(node, out name));
 }
Beispiel #12
0
 protected abstract string ComputeNameForDecl(IPDecl decl);
Beispiel #13
0
 public PermissionType(NamedEventSet eventSet)
     : base(TypeKind.Base)
 {
     origin = eventSet;
     AllowedPermissions = new Lazy<IReadOnlyList<PEvent>>(() => eventSet.Events.ToList());
 }
Beispiel #14
0
 public PermissionType(Interface pInterface)
     : base(TypeKind.Base)
 {
     origin = pInterface;
     AllowedPermissions = new Lazy<IReadOnlyList<PEvent>>(() => pInterface.ReceivableEvents.Events.ToList());
 }
Beispiel #15
0
 public PermissionType(Machine machine)
     : base(TypeKind.Base)
 {
     origin = machine;
     AllowedPermissions = new Lazy<IReadOnlyList<PEvent>>(() => machine.Receives.Events.ToList());
 }
Beispiel #16
0
 protected abstract void WriteDecl(IPDecl decl);