@@ -289,9 +289,96 @@ impl Context {
289
289
) ;
290
290
float. register_trait ( Float , float_show) ;
291
291
292
+ /* Imag */
293
+ let mut imag = Self :: builtin_mono_class ( IMAG , 2 ) ;
294
+ imag. register_superclass ( Complex , & complex) ;
295
+ imag. register_builtin_py_impl (
296
+ COMPLEX ,
297
+ Ratio ,
298
+ Const ,
299
+ Visibility :: BUILTIN_PUBLIC ,
300
+ Some ( COMPLEX ) ,
301
+ ) ;
302
+ imag. register_marker_trait ( self , mono ( NUM ) ) . unwrap ( ) ;
303
+ imag. register_marker_trait ( self , mono ( ORD ) ) . unwrap ( ) ;
304
+ let mut imag_ord = Self :: builtin_methods ( Some ( mono ( ORD ) ) , 2 ) ;
305
+ imag_ord. register_builtin_erg_impl (
306
+ OP_CMP ,
307
+ fn1_met ( Imag , Imag , mono ( ORDERING ) ) ,
308
+ Const ,
309
+ Visibility :: BUILTIN_PUBLIC ,
310
+ ) ;
311
+ imag. register_trait ( Imag , imag_ord) ;
312
+ let mut imag_eq = Self :: builtin_methods ( Some ( mono ( EQ ) ) , 2 ) ;
313
+ imag_eq. register_builtin_erg_impl (
314
+ OP_EQ ,
315
+ fn1_met ( Imag , Imag , Bool ) ,
316
+ Const ,
317
+ Visibility :: BUILTIN_PUBLIC ,
318
+ ) ;
319
+ imag. register_trait ( Imag , imag_eq) ;
320
+ let op_t = fn1_met ( Imag , Imag , Imag ) ;
321
+ let mut imag_add = Self :: builtin_methods ( Some ( poly ( ADD , vec ! [ ty_tp( Imag ) ] ) ) , 2 ) ;
322
+ imag_add. register_builtin_erg_impl ( OP_ADD , op_t. clone ( ) , Const , Visibility :: BUILTIN_PUBLIC ) ;
323
+ imag_add. register_builtin_const (
324
+ OUTPUT ,
325
+ Visibility :: BUILTIN_PUBLIC ,
326
+ ValueObj :: builtin_class ( Imag ) ,
327
+ ) ;
328
+ imag. register_trait ( Imag , imag_add) ;
329
+ let mut imag_sub = Self :: builtin_methods ( Some ( poly ( SUB , vec ! [ ty_tp( Imag ) ] ) ) , 2 ) ;
330
+ imag_sub. register_builtin_erg_impl ( OP_SUB , op_t. clone ( ) , Const , Visibility :: BUILTIN_PUBLIC ) ;
331
+ imag_sub. register_builtin_const (
332
+ OUTPUT ,
333
+ Visibility :: BUILTIN_PUBLIC ,
334
+ ValueObj :: builtin_class ( Imag ) ,
335
+ ) ;
336
+ imag. register_trait ( Imag , imag_sub) ;
337
+ let mut imag_mul = Self :: builtin_methods ( Some ( poly ( MUL , vec ! [ ty_tp( Imag ) ] ) ) , 2 ) ;
338
+ imag_mul. register_builtin_erg_impl ( OP_MUL , op_t. clone ( ) , Const , Visibility :: BUILTIN_PUBLIC ) ;
339
+ imag_mul. register_builtin_const (
340
+ OUTPUT ,
341
+ Visibility :: BUILTIN_PUBLIC ,
342
+ ValueObj :: builtin_class ( Imag ) ,
343
+ ) ;
344
+ imag_mul. register_builtin_const (
345
+ POW_OUTPUT ,
346
+ Visibility :: BUILTIN_PUBLIC ,
347
+ ValueObj :: builtin_class ( Imag ) ,
348
+ ) ;
349
+ imag. register_trait ( Imag , imag_mul) ;
350
+ let mut imag_div = Self :: builtin_methods ( Some ( poly ( DIV , vec ! [ ty_tp( Imag ) ] ) ) , 2 ) ;
351
+ imag_div. register_builtin_erg_impl ( OP_DIV , op_t, Const , Visibility :: BUILTIN_PUBLIC ) ;
352
+ imag_div. register_builtin_const (
353
+ OUTPUT ,
354
+ Visibility :: BUILTIN_PUBLIC ,
355
+ ValueObj :: builtin_class ( Imag ) ,
356
+ ) ;
357
+ imag_div. register_builtin_const (
358
+ MOD_OUTPUT ,
359
+ Visibility :: BUILTIN_PUBLIC ,
360
+ ValueObj :: builtin_class ( Imag ) ,
361
+ ) ;
362
+ imag. register_trait ( Imag , imag_div) ;
363
+ let mut imag_mutizable = Self :: builtin_methods ( Some ( mono ( MUTIZABLE ) ) , 2 ) ;
364
+ imag_mutizable. register_builtin_const (
365
+ MUTABLE_MUT_TYPE ,
366
+ Visibility :: BUILTIN_PUBLIC ,
367
+ ValueObj :: builtin_class ( mono ( MUT_IMAG ) ) ,
368
+ ) ;
369
+ imag. register_trait ( Imag , imag_mutizable) ;
370
+ let mut imag_show = Self :: builtin_methods ( Some ( mono ( SHOW ) ) , 1 ) ;
371
+ let t = fn0_met ( Imag , Str ) ;
372
+ imag_show. register_builtin_erg_impl ( TO_STR , t, Immutable , Visibility :: BUILTIN_PUBLIC ) ;
373
+ imag. register_trait ( Imag , imag_show) ;
374
+ imag. register_py_builtin ( OP_GT , fn1_met ( Imag , Imag , Bool ) , Some ( OP_GT ) , 0 ) ;
375
+ imag. register_py_builtin ( OP_GE , fn1_met ( Imag , Imag , Bool ) , Some ( OP_GE ) , 0 ) ;
376
+ imag. register_py_builtin ( OP_LT , fn1_met ( Imag , Imag , Bool ) , Some ( OP_LT ) , 0 ) ;
377
+ imag. register_py_builtin ( OP_LE , fn1_met ( Imag , Imag , Bool ) , Some ( OP_LE ) , 0 ) ;
378
+
292
379
/* Ratio */
293
380
let mut ratio = Self :: builtin_mono_class ( RATIO , 2 ) ;
294
- ratio. register_superclass ( Obj , & obj ) ;
381
+ ratio. register_superclass ( Complex , & complex ) ;
295
382
ratio. register_builtin_py_impl ( REAL , Ratio , Const , Visibility :: BUILTIN_PUBLIC , Some ( REAL ) ) ;
296
383
ratio. register_builtin_py_impl ( IMAG , Ratio , Const , Visibility :: BUILTIN_PUBLIC , Some ( IMAG ) ) ;
297
384
ratio. register_marker_trait ( self , mono ( NUM ) ) . unwrap ( ) ;
0 commit comments