public Native UpdateNative(ulong hash, Stack.DataType returns, params Stack.DataType[] param)
        {
            Native native = null;

            lock (Program.ThreadLock)
            {
                if (!TryGetValue(hash, out native))
                {
                    throw new Exception("Unknown Native: " + hash.ToString("X"));
                }

                native.Return = returns.LongName();
                for (int i = 0; i < param.Length; ++i)
                {
                    if (native.Params[i].Vardiac)
                    {
                        break;
                    }
                    if (native.Params[i].StackType.IsUnknown())
                    {
                        native.Params[i].Type = param[i].LongName();
                    }
                }
            }
            return(native);
        }
 public bool UpdateRetType(ulong hash, Stack.DataType returns, bool over = false)
 {
     lock (Program.ThreadLock)
     {
         Native native;
         if (TryGetValue(hash, out native) && !native.ReturnParam.FixedType)
         {
             if (native.ReturnParam.StackType.Precedence() < returns.Precedence())
             {
                 native.ReturnParam.Type = returns.LongName();
                 return(true);
             }
         }
         return(false);
     }
 }
 public bool UpdateParam(ulong hash, Stack.DataType type, int index)
 {
     lock (Program.ThreadLock)
     {
         Native native;
         if (TryGetValue(hash, out native) && !native.Vardiac && index < native.Params.Count)
         {
             Param p = native.Params[index];
             if (p.StackType.Precedence() < type.Precedence() && !p.FixedType)
             {
                 p.Type = type.LongName();
                 return(true);
             }
         }
         return(false);
     }
 }