Check-in [56b242ceac]
Not logged in

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:added c-eval
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1: 56b242ceac0ca4849c676988a238d7572dac58ac
User & Date: aldo 2016-12-08 00:36:37
Context
2016-12-08
00:37
improved string-split check-in: 524150d095 user: aldo tags: trunk
00:36
added c-eval check-in: 56b242ceac user: aldo tags: trunk
00:35
added posix.sls check-in: a6f2950586 user: aldo tags: trunk
Changes
Hide Diffs Unified Diffs Ignore Whitespace Patch

Added c-eval.sls.

















































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40

(library (c-eval)
	(export c-eval c-eval-printf c-eval-includes)
	(import (chezscheme) (posix))

	(define c-eval-includes (make-parameter '("stdio.h")))
	
	(define (c-eval-printf format . values)
	  (import (only (data-structures) string-intersperse ->string))
	  (c-eval (string-append "printf (\"" format "\"," (string-intersperse (map ->string values) ",") ");")))
		
	(define (c-eval expr)
	  (with-mktemp
	   "/tmp/c-eval-XXXXXX"
	   (lambda (file)
	     (apply
	      (lambda (in out pid)
		(for-each (lambda (x)
			    (fprintf out "#include <~a>~%" x)) (c-eval-includes))
		(fprintf out "int main() {~%")
		(fprintf out "~a~%" expr)
		(fprintf out "}~%")
		(close-port out)
		(display (cond [(get-string-all in ) => (lambda (x) (if (eof-object? x) "" x))]))
		(unless (zero? (wait-for-pid pid))
			(errorf 'c-repl "compilation failed"))
		(apply (lambda (p-in p-out p-pid)
			 (get-string-all p-in))
		       (process (format "~a" file))))
	      (process (format #f "gcc -o ~a -x c -" file))))))

	  
	  ) ;;library c-eval

#|
(import (c-eval))
(c-eval-includes '("stdio.h" "stdint.h"))
(string->number (c-eval-printf  "%d" "sizeof (uint32_t)"))

|#