public static bool CanChangeType(ScriptObject par, Type type)
{
if (type == TYPE_OBJECT)
return true;
else if (type == TYPE_SBYTE || type == TYPE_BYTE || type == TYPE_SHORT || type == TYPE_USHORT || type == TYPE_INT || type == TYPE_UINT ||
type == TYPE_FLOAT || type == TYPE_DOUBLE || type == TYPE_DECIMAL || type == TYPE_LONG)
return par is ScriptNumber;
else if (type == TYPE_BOOL)
return par is ScriptBoolean;
else if (type.GetTypeInfo().IsEnum)
return par is ScriptEnum && ((ScriptEnum)par).EnumType == type;
else if (par is ScriptNull)
return true;
else if (type == TYPE_STRING)
return par is ScriptString;
else if (type == TYPE_TYPE)
return par is ScriptUserdata;
else if (TYPE_DELEGATE.GetTypeInfo().IsAssignableFrom(type))
return (par is ScriptFunction) || (par is ScriptUserdata && (par as ScriptUserdata).ValueType == type);
else if (par is ScriptUserdata)
return type.GetTypeInfo().IsAssignableFrom(((ScriptUserdata)par).ValueType);
else
return type.GetTypeInfo().IsAssignableFrom(par.GetType());
}
public static void WriteString(BinaryWriter writer, string str)