public void Write(SwfWriter writer) { writer.WriteUIntEncoded((uint)SlotId); writer.WriteUIntEncoded((uint)Type.Index); if (HasValue) { writer.WriteConstIndex(_value); } else { writer.WriteByte(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); } } } }