예제 #1
0
 public void Write(SwfWriter writer)
 {
     writer.WriteUIntEncoded((uint)SlotId);
     writer.WriteUIntEncoded((uint)Type.Index);
     if (HasValue)
     {
         writer.WriteConstIndex(_value);
     }
     else
     {
         writer.WriteByte(0);
     }
 }
예제 #2
0
        public void Write(SwfWriter writer)
        {
            var abc = writer.ABC;

            int paramCount = _params.Count;

            writer.WriteUIntEncoded((uint)paramCount);

            if (ReturnType == null)
            {
                writer.WriteUInt8(0);
            }
            else
            {
                writer.WriteUIntEncoded((uint)ReturnType.Index);
            }

            //U30 param_types[param_count]
            for (int i = 0; i < paramCount; ++i)
            {
                var p = _params[i];
                //For now even if one of parameter has no name then we will not write param names at all
                if (abc.AutoComplete)
                {
                    if (p.HasName)
                    {
                        HasParamNames = true;
                    }
                    if (p.IsOptional)
                    {
                        HasOptionalParams = true;
                    }
                }
                writer.WriteUIntEncoded((uint)p.Type.Index);
            }

            //name
            if (_name == null)
            {
                writer.WriteUInt8(0);
            }
            else
            {
                writer.WriteUIntEncoded((uint)_name.Index);
            }

            //flags
            writer.WriteUInt8((byte)Flags);

            //param values
            if (HasOptionalParams)
            {
                int optionalCount = _params.Count(p => p.IsOptional);

                writer.WriteUIntEncoded((uint)optionalCount);
                for (int i = 0; i < paramCount; ++i)
                {
                    var p = _params[i];
                    if (p.IsOptional)
                    {
                        writer.WriteConstIndex(p.Value);
                    }
                }
            }

            //param names
            if (HasParamNames)
            {
                for (int i = 0; i < paramCount; ++i)
                {
                    var p = _params[i];
                    if (p.Name == null)
                    {
                        writer.WriteUInt8(0);
                    }
                    else
                    {
                        writer.WriteUIntEncoded((uint)p.Name.Index);
                    }
                }
            }
        }