[gambit-list] Javascript Backend
Marc Feeley
feeley at iro.umontreal.ca
Fri May 16 11:15:36 EDT 2014
On May 16, 2014, at 9:36 AM, Marc Feeley <feeley at iro.umontreal.ca> wrote:
> You need to
>
> (declare (extended-bindings) (not safe))
>
> for those procedures to be inlined.
>
> I may change the “safety” of those procedures though because others have had similar problems.
>
> Also I will add tests to avoid JS-level errors when calling an undefined global variable.
>
> Marc
I have now changed the safety to avoid the need for (not safe).
Also, the procedures ##inline-host-expression and ##inline-host-statement have been generalized to allow parameters. The Nth parameter after the code string will be inserted where there is a @N@ reference in the code string.
Finally the ##inline-host-declaration procedure has been added to allow inserting toplevel host code in the generated code.
Below is an example. Note the use of the Gambit_scm2js and Gambit_js2scm functions to convert values between their JavaScript and Scheme representations.
Marc
(declare (extended-bindings)) ;; to inline the ##inline-host-... procedures
(##inline-host-declaration #<<host-code-end
function out(x) { console.log(x); }
host-code-end
)
(define (out x)
(##inline-host-statement "out(Gambit_scm2js(@1@));" x))
(define (add x y)
(##inline-host-expression
"Gambit_js2scm(Gambit_scm2js(@1@) + Gambit_scm2js(@2@))" x y))
(out "hello!")
(out #t)
(out (add 11 22))
;; Output:
;;
;; % gsc -c -target js test.scm
;; % node test.js
;; hello!
;; true
;; 33
More information about the Gambit-list
mailing list