Beispiel #1
0
        protected void FormatTraits(IHasTraits traitsObject)
        {
            ArrayList traitList = traitsObject.Traits;
            TraitInfo trait;

            for (int i = 0, n = traitList.Count; i < n; ++i)
            {
                trait = (TraitInfo)traitList[i];

                if (trait.Body is TraitClass)
                {
                    TraitClass classBody = (TraitClass)trait.Body;

                    #region Class information

                    ClassInfo classInfo = (ClassInfo)_abc.Classes[(int)classBody.ClassI];
                    InstanceInfo instanceInfo = (InstanceInfo)_abc.Instances[(int)classBody.ClassI];

                    string classDefinition = "";

                    if (0 != (instanceInfo.Flags & InstanceInfo.ClassInterface))
                    {
                        classDefinition += "interface ";
                    }
                    else
                    {
                        if (0 != (instanceInfo.Flags & InstanceInfo.ClassFinal))
                        {
                            classDefinition += "final ";
                        }

                        if (0 == (instanceInfo.Flags & InstanceInfo.ClassSealed))
                        {
                            classDefinition += "dynamic ";
                        }

                        classDefinition += "class ";
                    }

                    //TODO add protected namespace lookup

                    classDefinition += NameUtil.ResolveMultiname(_abc, (int)instanceInfo.Name) + " extends " + NameUtil.ResolveMultiname(_abc, (int)instanceInfo.SuperName) + " ";

                    if (instanceInfo.Interfaces.Count > 0)
                    {
                        classDefinition += "implements ";

                        for (int j = 0, m = instanceInfo.Interfaces.Count; j < m; ++j)
                        {
                            classDefinition += NameUtil.ResolveMultiname(_abc, (U30)instanceInfo.Interfaces[j]);

                            if (j != m - 1)
                            {
                                classDefinition += ", ";
                            }
                        }
                    }

                    _output.Add(";" + classDefinition + "\r\n");

                    _output.Add(";cinit (static class initializer)\r\n");

                    FormatMethod(classInfo.CInit);

                    _output.Add(";class members\r\n");

                    FormatTraits(classInfo);

                    _output.Add(";iinit (instance initializer aka constructor)\r\n");

                    FormatMethod(instanceInfo.IInit);

                    _output.Add(";instance members\r\n");

                    FormatTraits(instanceInfo);

                    #endregion
                }
                else if (trait.Body is TraitConst)
                {
                }
                else if (trait.Body is TraitFunction)
                {
                }
                else if ((trait.Body is TraitMethod)||(trait.Body is TraitGetter)||(trait.Body is TraitSetter))
                {
                    TraitMethod methodBody = (TraitMethod)trait.Body;

                    _output.Add(";" + NameUtil.ResolveMultiname(_abc, trait.Name) + "\r\n");

                    FormatMethod(methodBody.Method);
                }
                else
                {
                }
            }
        }
Beispiel #2
0
        protected void FormatTraits(IHasTraits traitsObject)
        {
            ArrayList traitList = traitsObject.Traits;
            TraitInfo trait;

            for (int i = 0, n = traitList.Count; i < n; ++i)
            {
                trait = (TraitInfo)traitList[i];

                if (trait.Body is TraitClass)
                {
                    TraitClass classBody = (TraitClass)trait.Body;

                    #region Class information

                    ClassInfo    classInfo    = (ClassInfo)_abc.Classes[(int)classBody.ClassI];
                    InstanceInfo instanceInfo = (InstanceInfo)_abc.Instances[(int)classBody.ClassI];

                    string classDefinition = "";

                    if (0 != (instanceInfo.Flags & InstanceInfo.ClassInterface))
                    {
                        classDefinition += "interface ";
                    }
                    else
                    {
                        if (0 != (instanceInfo.Flags & InstanceInfo.ClassFinal))
                        {
                            classDefinition += "final ";
                        }

                        if (0 == (instanceInfo.Flags & InstanceInfo.ClassSealed))
                        {
                            classDefinition += "dynamic ";
                        }

                        classDefinition += "class ";
                    }

                    //TODO add protected namespace lookup

                    classDefinition += NameUtil.ResolveMultiname(_abc, (int)instanceInfo.Name) + " extends " + NameUtil.ResolveMultiname(_abc, (int)instanceInfo.SuperName) + " ";

                    if (instanceInfo.Interfaces.Count > 0)
                    {
                        classDefinition += "implements ";

                        for (int j = 0, m = instanceInfo.Interfaces.Count; j < m; ++j)
                        {
                            classDefinition += NameUtil.ResolveMultiname(_abc, (U30)instanceInfo.Interfaces[j]);

                            if (j != m - 1)
                            {
                                classDefinition += ", ";
                            }
                        }
                    }

                    _output.Add(";" + classDefinition + "\r\n");

                    _output.Add(";cinit (static class initializer)\r\n");

                    FormatMethod(classInfo.CInit);

                    _output.Add(";class members\r\n");

                    FormatTraits(classInfo);

                    _output.Add(";iinit (instance initializer aka constructor)\r\n");

                    FormatMethod(instanceInfo.IInit);

                    _output.Add(";instance members\r\n");

                    FormatTraits(instanceInfo);

                    #endregion
                }
                else if (trait.Body is TraitConst)
                {
                }
                else if (trait.Body is TraitFunction)
                {
                }
                else if ((trait.Body is TraitMethod) || (trait.Body is TraitGetter) || (trait.Body is TraitSetter))
                {
                    TraitMethod methodBody = (TraitMethod)trait.Body;

                    _output.Add(";" + NameUtil.ResolveMultiname(_abc, trait.Name) + "\r\n");

                    FormatMethod(methodBody.Method);
                }
                else
                {
                }
            }
        }