@@ -980,33 +980,6 @@ export function nil_QMARK_(v) {
980980
981981export const PROTOCOL_SENTINEL = { } ;
982982
983- function pr_str_1 ( x ) {
984- if ( x === null ) {
985- return 'null' ;
986- }
987- return JSON . stringify ( x , ( _key , value ) => {
988- switch ( typeConst ( value ) ) {
989- case SET_TYPE :
990- case LAZY_ITERABLE_TYPE :
991- return [ ...value ] ;
992- case MAP_TYPE :
993- return Object . fromEntries ( value ) ;
994- default : {
995- // console.log(value);
996- return value ;
997- }
998- }
999- } ) ;
1000- }
1001-
1002- export function pr_str ( ...xs ) {
1003- return xs . map ( pr_str_1 ) . join ( ' ' ) ;
1004- }
1005-
1006- export function prn ( ...xs ) {
1007- println ( pr_str ( ...xs ) ) ;
1008- }
1009-
1010983export class Atom {
1011984 constructor ( init ) {
1012985 this . val = init ;
@@ -2995,3 +2968,45 @@ export function volatile_BANG_(x) {
29952968export function vreset_BANG_ ( vol , v ) {
29962969 vol . v = v ;
29972970}
2971+
2972+ function toEDN ( value , seen = new WeakSet ( ) ) {
2973+ if ( value === null ) return 'nil' ;
2974+ if ( typeof value === 'number' || typeof value === 'boolean' ) return String ( value ) ;
2975+ if ( typeof value === 'string' ) return JSON . stringify ( value ) ;
2976+ if ( typeof value === 'bigint' ) return `${ value } N` ;
2977+
2978+ if ( typeof value === 'object' ) {
2979+ if ( seen . has ( value ) ) return '#object[circular]' ;
2980+ seen . add ( value ) ;
2981+ const T = typeConst ( value ) ;
2982+ let keys ;
2983+ switch ( T ) {
2984+ case ARRAY_TYPE :
2985+ return `[${ value . map ( ( v ) => toEDN ( v , seen ) ) . join ( ' ' ) } ]` ;
2986+ case SET_TYPE :
2987+ return `#{${ Array . from ( value )
2988+ . map ( ( v ) => toEDN ( v , seen ) )
2989+ . join ( ' ' ) } }`;
2990+ case MAP_TYPE :
2991+ return `#js/map {${ Array . from ( value . entries ( ) )
2992+ . map ( ( [ k , v ] ) => `${ toEDN ( k , seen ) } ${ toEDN ( v , seen ) } ` )
2993+ . join ( ', ' ) } }`;
2994+ case LAZY_ITERABLE_TYPE :
2995+ case LIST_TYPE :
2996+ return `(${ mapv ( ( v ) => `${ toEDN ( v , seen ) } ` , value ) . join ( ', ' ) } )` ;
2997+ default :
2998+ keys = Object . keys ( value ) ;
2999+ return `{${ keys . map ( ( k ) => `:${ k } ${ toEDN ( value [ k ] , seen ) } ` ) . join ( ', ' ) } }` ;
3000+ }
3001+ }
3002+
3003+ return `#object[${ value . constructor . name } ]` ;
3004+ }
3005+
3006+ export function pr_str ( ...xs ) {
3007+ return xs . map ( ( v , _ ) => toEDN ( v ) ) . join ( ' ' ) ;
3008+ }
3009+
3010+ export function prn ( ...xs ) {
3011+ return console . log ( pr_str ( ...xs ) ) ;
3012+ }
0 commit comments