* print.c (scm_iprin1): Handle fractions.
[bpt/guile.git] / libguile / objects.c
index 0f4443c..f655470 100644 (file)
@@ -48,7 +48,7 @@ SCM scm_class_boolean, scm_class_char, scm_class_pair;
 SCM scm_class_procedure, scm_class_string, scm_class_symbol;
 SCM scm_class_procedure_with_setter, scm_class_primitive_generic;
 SCM scm_class_vector, scm_class_null;
-SCM scm_class_integer, scm_class_real, scm_class_complex;
+SCM scm_class_integer, scm_class_real, scm_class_complex, scm_class_fraction;
 SCM scm_class_unknown;
 
 SCM *scm_port_class = 0;
@@ -71,19 +71,12 @@ SCM_DEFINE (scm_class_of, "class-of", 1, 0, 0,
     case scm_tc3_imm24:
       if (SCM_CHARP (x))
        return scm_class_char;
+      else if (SCM_BOOLP (x))
+        return scm_class_boolean;
+      else if (SCM_NULLP (x))
+        return scm_class_null;
       else
-       {
-         switch (SCM_ISYMNUM (x))
-           {
-           case SCM_ISYMNUM (SCM_BOOL_F):
-           case SCM_ISYMNUM (SCM_BOOL_T):
-             return scm_class_boolean;
-           case SCM_ISYMNUM (SCM_EOL):
-             return scm_class_null;
-           default:
-             return scm_class_unknown;
-           }
-       }
+        return scm_class_unknown;
 
     case scm_tc3_cons:
       switch (SCM_TYP7 (x))
@@ -109,6 +102,17 @@ SCM_DEFINE (scm_class_of, "class-of", 1, 0, 0,
          return scm_class_vector;
        case scm_tc7_string:
          return scm_class_string;
+        case scm_tc7_number:
+          switch SCM_TYP16 (x) {
+          case scm_tc16_big:
+            return scm_class_integer;
+          case scm_tc16_real:
+            return scm_class_real;
+          case scm_tc16_complex:
+            return scm_class_complex;
+         case scm_tc16_fraction:
+           return scm_class_fraction;
+          }
        case scm_tc7_asubr:
        case scm_tc7_subr_0:
        case scm_tc7_subr_1: