diff -r df6951233012 src/sparsersb.cc
--- a/src/sparsersb.cc	Fri Jun 22 23:28:18 2018 +0200
+++ b/src/sparsersb.cc	Sun Jan 20 22:15:20 2019 +0100
@@ -68,6 +68,7 @@
 
 #define RSBOI_WANT_PRINT_PCT_OCTAVE_STYLE 1
 
+#include <octave/interpreter.h>
 #include <octave/oct.h>
 #include <octave/ov-re-mat.h>
 #include <octave/ov-re-sparse.h>
@@ -902,7 +903,7 @@
 			error("save_binary() " RSBOI_0_NIYERRMSG);
 			return false;
 		}
-		bool load_binary (std::istream& is, bool swap, oct_mach_info::float_format fmt)
+		bool load_binary (std::istream& is, bool swap, octave::mach_info::float_format fmt)
 		{
 			error("load_binary() " RSBOI_0_NIYERRMSG);
 			return false;
@@ -1985,95 +1986,95 @@
 // deprecated; need a wrapper using octave::typeinfo::register_unary_op
 #define RSBOI_INSTALL_UNOP INSTALL_UNOP 
 
-static void install_sparsersb_ops (void)
+static void install_sparsersb_ops (octave::type_info& ti)
 {
 	RSBOI_DEBUG_NOTICE(RSBOI_D_EMPTY_MSG);
 	#ifdef RSB_FULLY_IMPLEMENTED
 	/* boolean pattern-based not */
-	RSBOI_INSTALL_UNOP (op_not, octave_sparsersb_mtx, op_not);
+	INSTALL_UNOP_TI (ti, op_not, octave_sparsersb_mtx, op_not);
 	/* to-dense operations */
-	RSBOI_INSTALL_ASSIGNOP (op_asn_eq, octave_sparsersb_mtx, octave_scalar, assigns);
+	INSTALL_ASSIGNOP_TI (ti, op_asn_eq, octave_sparsersb_mtx, octave_scalar, assigns);
 	/* ? */
-	RSBOI_INSTALL_UNOP (op_uplus, octave_sparsersb_mtx, uplus);
+	INSTALL_UNOP_TI (ti, op_uplus, octave_sparsersb_mtx, uplus);
 	/* elemental comparison, evaluate to sparse or dense boolean matrices */
-	RSBOI_INSTALL_BINOP (op_eq, octave_sparsersb_mtx, , );
-	RSBOI_INSTALL_BINOP (op_le, octave_sparsersb_mtx, , );
-	RSBOI_INSTALL_BINOP (op_lt, octave_sparsersb_mtx, , );
-	RSBOI_INSTALL_BINOP (op_ge, octave_sparsersb_mtx, , );
-	RSBOI_INSTALL_BINOP (op_gt, octave_sparsersb_mtx, , );
-	RSBOI_INSTALL_BINOP (op_ne, octave_sparsersb_mtx, , );
+	INSTALL_BINOP_TI (ti, op_eq, octave_sparsersb_mtx, , );
+	INSTALL_BINOP_TI (ti, op_le, octave_sparsersb_mtx, , );
+	INSTALL_BINOP_TI (ti, op_lt, octave_sparsersb_mtx, , );
+	INSTALL_BINOP_TI (ti, op_ge, octave_sparsersb_mtx, , );
+	INSTALL_BINOP_TI (ti, op_gt, octave_sparsersb_mtx, , );
+	INSTALL_BINOP_TI (ti, op_ne, octave_sparsersb_mtx, , );
 	/* pure elemental; scalar and sparse arguments ?! */
 								 // ?
-	RSBOI_INSTALL_BINOP (op_el_ldiv, octave_sparsersb_mtx, , );
-	RSBOI_INSTALL_BINOP (op_el_ldiv_eq, octave_sparsersb_mtx, , ); // errval = rsb_mtx_upd_values(this->mtxAp,RSB_ELOPF_SCALE_ROWS,cm.data());
-	RSBOI_INSTALL_BINOP (op_el_mul_eq, octave_sparsersb_mtx, , ); // diagonal subst ??
-	RSBOI_INSTALL_BINOP (op_el_and, octave_sparsersb_mtx, , );
-	RSBOI_INSTALL_BINOP (op_el_or, octave_sparsersb_mtx, , );
+	INSTALL_BINOP_TI (ti, op_el_ldiv, octave_sparsersb_mtx, , );
+	INSTALL_BINOP_TI (ti, op_el_ldiv_eq, octave_sparsersb_mtx, , ); // errval = rsb_mtx_upd_values(this->mtxAp,RSB_ELOPF_SCALE_ROWS,cm.data());
+	INSTALL_BINOP_TI (ti, op_el_mul_eq, octave_sparsersb_mtx, , ); // diagonal subst ??
+	INSTALL_BINOP_TI (ti, op_el_and, octave_sparsersb_mtx, , );
+	INSTALL_BINOP_TI (ti, op_el_or, octave_sparsersb_mtx, , );
 	/* shift operations: they may be left out from the implementation */
-	RSBOI_INSTALL_BINOP (op_lshift, octave_sparsersb_mtx, , );
-	RSBOI_INSTALL_BINOP (op_rshift, octave_sparsersb_mtx, , );
+	INSTALL_BINOP_TI (ti, op_lshift, octave_sparsersb_mtx, , );
+	INSTALL_BINOP_TI (ti, op_rshift, octave_sparsersb_mtx, , );
 	#endif
-	// RSBOI_INSTALL_ASSIGNOP (op_el_div_eq, octave_sparsersb_mtx, octave_matrix, rsb_op_el_div_eq_sc); // errval = rsb_mtx_upd_values(this->mtxAp,RSB_ELOPF_SCALE_ROWS,cm.data());
-	// RSBOI_INSTALL_ASSIGNOP (op_el_mul_eq, octave_sparsersb_mtx, octave_matrix, rsb_op_el_mul_eq_sc);
+	// INSTALL_ASSIGNOP_TI (ti, op_el_div_eq, octave_sparsersb_mtx, octave_matrix, rsb_op_el_div_eq_sc); // errval = rsb_mtx_upd_values(this->mtxAp,RSB_ELOPF_SCALE_ROWS,cm.data());
+	// INSTALL_ASSIGNOP_TI (ti, op_el_mul_eq, octave_sparsersb_mtx, octave_matrix, rsb_op_el_mul_eq_sc);
 	//INSTALL_WIDENOP (octave_sparsersb_mtx, octave_sparse_matrix,octave_sparse_rsb_to_octave_sparse_conv);/* a DEFCONV .. */
 	//INSTALL_ASSIGNCONV (octave_sparsersb_mtx, octave_sparse_matrix,octave_sparse_matrix);/* .. */
 	// no need for the following: need a good conversion function, though
-	//RSBOI_INSTALL_UNOP (op_incr, octave_sparsersb_mtx, op_incr);
-	//RSBOI_INSTALL_UNOP (op_decr, octave_sparsersb_mtx, op_decr);
-	RSBOI_INSTALL_BINOP (op_el_mul, octave_sparsersb_mtx, octave_scalar, rsb_el_mul_s);
+	//INSTALL_UNOP_TI (ti, op_incr, octave_sparsersb_mtx, op_incr);
+	//INSTALL_UNOP_TI (ti, op_decr, octave_sparsersb_mtx, op_decr);
+	INSTALL_BINOP_TI (ti, op_el_mul, octave_sparsersb_mtx, octave_scalar, rsb_el_mul_s);
 #if RSBOI_WANT_DOUBLE_COMPLEX
-	RSBOI_INSTALL_BINOP (op_el_mul, octave_sparsersb_mtx, octave_complex, rsb_el_mul_c);
+	INSTALL_BINOP_TI (ti, op_el_mul, octave_sparsersb_mtx, octave_complex, rsb_el_mul_c);
 #endif /* RSBOI_WANT_DOUBLE_COMPLEX */
-//	RSBOI_INSTALL_ASSIGNOP (op_mul_eq, octave_sparsersb_mtx, octave_scalar, rsb_op_mul_eq_s); // 20110313 not effective
-//	RSBOI_INSTALL_ASSIGNOP (op_div_eq, octave_sparsersb_mtx, octave_scalar, rsb_op_div_eq_s); // 20110313 not effective
-	RSBOI_INSTALL_BINOP (op_el_div, octave_sparsersb_mtx, octave_scalar, rsb_el_div_s);
+//	INSTALL_ASSIGNOP_TI (ti, op_mul_eq, octave_sparsersb_mtx, octave_scalar, rsb_op_mul_eq_s); // 20110313 not effective
+//	INSTALL_ASSIGNOP_TI (ti, op_div_eq, octave_sparsersb_mtx, octave_scalar, rsb_op_div_eq_s); // 20110313 not effective
+	INSTALL_BINOP_TI (ti, op_el_div, octave_sparsersb_mtx, octave_scalar, rsb_el_div_s);
 #if RSBOI_WANT_DOUBLE_COMPLEX
-	RSBOI_INSTALL_BINOP (op_el_div, octave_sparsersb_mtx, octave_complex, rsb_el_div_c);
+	INSTALL_BINOP_TI (ti, op_el_div, octave_sparsersb_mtx, octave_complex, rsb_el_div_c);
 #endif /* RSBOI_WANT_DOUBLE_COMPLEX */
-	RSBOI_INSTALL_BINOP (op_el_pow, octave_sparsersb_mtx, octave_scalar, el_pow);
-	RSBOI_INSTALL_UNOP (op_uminus, octave_sparsersb_mtx, uminus);
-	RSBOI_INSTALL_BINOP (op_ldiv, octave_sparsersb_mtx, octave_matrix, ldiv);
-	RSBOI_INSTALL_BINOP (op_el_ldiv, octave_sparsersb_mtx, octave_matrix, el_ldiv);
-	RSBOI_INSTALL_BINOP (op_div, octave_sparsersb_mtx, octave_matrix, div);
-	RSBOI_INSTALL_BINOP (op_div, octave_sparsersb_mtx, octave_scalar, rsb_s_div);
+	INSTALL_BINOP_TI (ti, op_el_pow, octave_sparsersb_mtx, octave_scalar, el_pow);
+	INSTALL_UNOP_TI (ti, op_uminus, octave_sparsersb_mtx, uminus);
+	INSTALL_BINOP_TI (ti, op_ldiv, octave_sparsersb_mtx, octave_matrix, ldiv);
+	INSTALL_BINOP_TI (ti, op_el_ldiv, octave_sparsersb_mtx, octave_matrix, el_ldiv);
+	INSTALL_BINOP_TI (ti, op_div, octave_sparsersb_mtx, octave_matrix, div);
+	INSTALL_BINOP_TI (ti, op_div, octave_sparsersb_mtx, octave_scalar, rsb_s_div);
 #if RSBOI_WANT_DOUBLE_COMPLEX
-	RSBOI_INSTALL_BINOP (op_div, octave_sparsersb_mtx, octave_complex, rsb_c_div);
+	INSTALL_BINOP_TI (ti, op_div, octave_sparsersb_mtx, octave_complex, rsb_c_div);
 #endif /* RSBOI_WANT_DOUBLE_COMPLEX */
-	RSBOI_INSTALL_BINOP (op_mul, octave_sparsersb_mtx, octave_scalar, rsb_s_mul);
+	INSTALL_BINOP_TI (ti, op_mul, octave_sparsersb_mtx, octave_scalar, rsb_s_mul);
 #if RSBOI_WANT_DOUBLE_COMPLEX
-	RSBOI_INSTALL_BINOP (op_mul, octave_sparsersb_mtx, octave_complex, rsb_c_mul);
-	RSBOI_INSTALL_BINOP (op_mul, octave_sparsersb_mtx, octave_complex_matrix, op_c_mul);
-	RSBOI_INSTALL_BINOP (op_trans_mul, octave_sparsersb_mtx, octave_complex_matrix, op_c_trans_mul);
-	RSBOI_INSTALL_BINOP (op_ldiv, octave_sparsersb_mtx, octave_complex_matrix, c_ldiv);
-	RSBOI_INSTALL_BINOP (op_trans_ldiv, octave_sparsersb_mtx, octave_complex_matrix, trans_c_ldiv);
+	INSTALL_BINOP_TI (ti, op_mul, octave_sparsersb_mtx, octave_complex, rsb_c_mul);
+	INSTALL_BINOP_TI (ti, op_mul, octave_sparsersb_mtx, octave_complex_matrix, op_c_mul);
+	INSTALL_BINOP_TI (ti, op_trans_mul, octave_sparsersb_mtx, octave_complex_matrix, op_c_trans_mul);
+	INSTALL_BINOP_TI (ti, op_ldiv, octave_sparsersb_mtx, octave_complex_matrix, c_ldiv);
+	INSTALL_BINOP_TI (ti, op_trans_ldiv, octave_sparsersb_mtx, octave_complex_matrix, trans_c_ldiv);
 #endif /* RSBOI_WANT_DOUBLE_COMPLEX */
 #if RSBOI_WANT_POW
-	RSBOI_INSTALL_BINOP (op_pow, octave_sparsersb_mtx, octave_scalar, rsb_s_pow);
+	INSTALL_BINOP_TI (ti, op_pow, octave_sparsersb_mtx, octave_scalar, rsb_s_pow);
 #endif /* RSBOI_WANT_POW */
-	RSBOI_INSTALL_BINOP (op_el_div, octave_sparsersb_mtx, octave_matrix, el_div);
-	RSBOI_INSTALL_UNOP (op_transpose, octave_sparsersb_mtx, transpose);
-	RSBOI_INSTALL_UNOP (op_hermitian, octave_sparsersb_mtx, htranspose);
-	RSBOI_INSTALL_ASSIGNOP (op_asn_eq, octave_sparsersb_mtx, octave_sparse_matrix, assign);
-	RSBOI_INSTALL_ASSIGNOP (op_asn_eq, octave_sparsersb_mtx, octave_matrix, assignm);
-	RSBOI_INSTALL_BINOP (op_mul, octave_sparsersb_mtx, octave_matrix, op_mul);
-	//RSBOI_INSTALL_BINOP (op_pow, octave_sparsersb_mtx, octave_matrix, op_pow);
-	RSBOI_INSTALL_BINOP (op_sub, octave_sparsersb_mtx, octave_sparsersb_mtx, op_sub);
-	RSBOI_INSTALL_BINOP (op_add, octave_sparsersb_mtx, octave_sparsersb_mtx, op_add);
-	//RSBOI_INSTALL_BINOP (op_trans_add, octave_sparsersb_mtx, octave_sparsersb_mtx, op_trans_add);
-	RSBOI_INSTALL_BINOP (op_mul, octave_sparsersb_mtx, octave_sparsersb_mtx, op_spmul);
-	RSBOI_INSTALL_BINOP (op_trans_mul, octave_sparsersb_mtx, octave_matrix, op_trans_mul);
-	RSBOI_INSTALL_BINOP (op_trans_ldiv, octave_sparsersb_mtx, octave_matrix, trans_ldiv);
-	//RSBOI_INSTALL_BINOP (op_mul_trans, octave_sparsersb_mtx, octave_matrix, op_mul_trans);
-	//RSBOI_INSTALL_BINOP (op_mul_trans, octave_sparsersb_mtx, octave_matrix, op_mul_trans);
-	//RSBOI_INSTALL_BINOP (op_herm_mul, octave_sparsersb_mtx, octave_matrix, op_herm_mul);
-	//RSBOI_INSTALL_BINOP (op_mul_herm, octave_sparsersb_mtx, octave_matrix, op_mul_herm);
-	//RSBOI_INSTALL_BINOP (op_el_not_and, octave_sparsersb_mtx, octave_matrix, op_el_not_and);
-	//RSBOI_INSTALL_BINOP (op_el_not_or , octave_sparsersb_mtx, octave_matrix, op_el_not_or );
-	//RSBOI_INSTALL_BINOP (op_el_and_not, octave_sparsersb_mtx, octave_matrix, op_el_and_not);
-	//RSBOI_INSTALL_BINOP (op_el_or _not, octave_sparsersb_mtx, octave_matrix, op_el_or _not);
+	INSTALL_BINOP_TI (ti, op_el_div, octave_sparsersb_mtx, octave_matrix, el_div);
+	INSTALL_UNOP_TI (ti, op_transpose, octave_sparsersb_mtx, transpose);
+	INSTALL_UNOP_TI (ti, op_hermitian, octave_sparsersb_mtx, htranspose);
+	INSTALL_ASSIGNOP_TI (ti, op_asn_eq, octave_sparsersb_mtx, octave_sparse_matrix, assign);
+	INSTALL_ASSIGNOP_TI (ti, op_asn_eq, octave_sparsersb_mtx, octave_matrix, assignm);
+	INSTALL_BINOP_TI (ti, op_mul, octave_sparsersb_mtx, octave_matrix, op_mul);
+	//INSTALL_BINOP_TI (ti, op_pow, octave_sparsersb_mtx, octave_matrix, op_pow);
+	INSTALL_BINOP_TI (ti, op_sub, octave_sparsersb_mtx, octave_sparsersb_mtx, op_sub);
+	INSTALL_BINOP_TI (ti, op_add, octave_sparsersb_mtx, octave_sparsersb_mtx, op_add);
+	//INSTALL_BINOP_TI (ti, op_trans_add, octave_sparsersb_mtx, octave_sparsersb_mtx, op_trans_add);
+	INSTALL_BINOP_TI (ti, op_mul, octave_sparsersb_mtx, octave_sparsersb_mtx, op_spmul);
+	INSTALL_BINOP_TI (ti, op_trans_mul, octave_sparsersb_mtx, octave_matrix, op_trans_mul);
+	INSTALL_BINOP_TI (ti, op_trans_ldiv, octave_sparsersb_mtx, octave_matrix, trans_ldiv);
+	//INSTALL_BINOP_TI (ti, op_mul_trans, octave_sparsersb_mtx, octave_matrix, op_mul_trans);
+	//INSTALL_BINOP_TI (ti, op_mul_trans, octave_sparsersb_mtx, octave_matrix, op_mul_trans);
+	//INSTALL_BINOP_TI (ti, op_herm_mul, octave_sparsersb_mtx, octave_matrix, op_herm_mul);
+	//INSTALL_BINOP_TI (ti, op_mul_herm, octave_sparsersb_mtx, octave_matrix, op_mul_herm);
+	//INSTALL_BINOP_TI (ti, op_el_not_and, octave_sparsersb_mtx, octave_matrix, op_el_not_and);
+	//INSTALL_BINOP_TI (ti, op_el_not_or , octave_sparsersb_mtx, octave_matrix, op_el_not_or );
+	//INSTALL_BINOP_TI (ti, op_el_and_not, octave_sparsersb_mtx, octave_matrix, op_el_and_not);
+	//INSTALL_BINOP_TI (ti, op_el_or _not, octave_sparsersb_mtx, octave_matrix, op_el_or _not);
 }
 
-static void install_sparse_rsb (void)
+static void install_sparse_rsb (octave::interpreter& interp)
 {
 	static bool rsboi_initialized = false;
 
@@ -2103,16 +2104,17 @@
 	if (!rsboi_sparse_rsb_loaded)
 	{
 		octave_sparsersb_mtx::register_type ();
-		install_sparsersb_ops ();
+		interp.mlock ();
+		octave::type_info& ti = interp.get_type_info ();
+		install_sparsersb_ops (ti);
 		rsboi_sparse_rsb_loaded = true;
-		mlock();
 	}
 	return;
 err:
 	RSBIO_NULL_STATEMENT_FOR_COMPILER_HAPPINESS
 }
 
-DEFUN_DLD (RSB_SPARSERSB_LABEL, args, nargout,
+DEFMETHOD_DLD (RSB_SPARSERSB_LABEL, interp, args, nargout,
 "-*- texinfo -*-\n\
 @deftypefn {Loadable Function} {@var{S} =} " RSBOI_FNS " (@var{a})\n\
 @deftypefnx {Loadable Function} {@var{S} =} " RSBOI_FNS " (@var{i}, @var{j}, @var{sv}, @var{m}, @var{n})\n\
@@ -2228,7 +2230,7 @@
 #else /* RSBOI_WANT_DOUBLE_COMPLEX */
 		RSBOI_0_ERROR(RSBOI_0_NOCOERRMSG);
 #endif /* RSBOI_WANT_DOUBLE_COMPLEX */
-	install_sparse_rsb();
+	install_sparse_rsb (interp);
 	if( nargin == 3 && args(0).is_string() && args(0).string_value()=="set" && args(1).is_string() && args(2).is_string())
 	{
 		// sparsersb ("set", OPN, OPV)
