language-helpers.rkt
#lang racket/base

(require (for-template racket/base)
         (for-template "runtime.rkt"))

(provide convert-datum)

(define (convert-datum v for-quote?)
  (cond
    [(null? v)
     #'nil]
    [(pair? v)
     #`(arc-cons #,(convert-datum (car v) for-quote?)
                 #,(convert-datum (cdr v) for-quote?))]
    
    [(string? v)
     #`(str (string-copy #,v))]
    
    [else
     (cond
       [for-quote?
        #`(quote #,(datum->syntax #f v))]
       [else 
        #`(#%datum . #,(datum->syntax #f v))])]))