Commits

UENISHI Kota  committed ce038fb

seems working, adding atom support

  • Participants
  • Parent commits c3bcbad

Comments (0)

Files changed (1)

 type erlterm =
     Int of int
   | Float of float
-      (*  | Atom of string *) 
+  | Atom of string
   | Tuple of erlterm list (* type of tuple is different btw Erlang and OCaml *)
   | List of erlterm list 
   | String of string
 	  let v = Scanf.sscanf (String.sub local_bin 1 32) "%f" (fun x->x) in
 	    Ok( Float( v ), Str.string_after local_bin 32); 
       | 'd' -> (* ATOM_EXT *)
-	  raise Not_supported;
+	  let len = (int_of_char (String.get local_bin 1))*256 + (int_of_char (String.get local_bin 2)) in
+	    Ok( Atom( String.sub local_bin 3 len ), Str.string_after local_bin (len+3) );
       | 'e' -> (* REFERENCE_EXT *)
 	  raise Not_supported;
       | 'f' -> (* PORT_EXT *)
       | 'p' -> (* NEW_REFERENCE_EXT *)
 	  raise Not_supported;
       | 'q' -> (* SMALL_ATOM_EXT *)
-	  raise Not_supported;	    
+	  let len = int_of_char (String.get local_bin 1) in   
+	    Ok( Atom( String.sub local_bin 3 len ), Str.string_after local_bin (len+3) );
       | 'r' -> (* FUN_EXT *)
 	  raise Not_supported;	    
       | 's' -> (* NEW_FUN_EXT *)