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: |
56b242ceac0ca4849c676988a238d757 |
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
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)")) |# |