kristianhasselknippe / tsce

TypeScript to Emacs Lisp transpiler
MIT License
7 stars 0 forks source link

Order of statements in functions are when let bindings are interspersed in the body #7

Closed kristianhasselknippe closed 5 years ago

kristianhasselknippe commented 5 years ago

Example:

function main() {
    var foo = {
        hei: 'hvordan',
        har: 'du',
        det: 'det?',
        ok: [1,2,3,4,5]
    }

    const ret = json.jsonEncode(foo)
    emacs.message('Json string: ' + ret)

    const parsed = json.jsonReadFromString<typeof foo>(ret)
    emacs.message('Parsed hei: ' + parsed.hei)
    emacs.message('Parsed det: ' + parsed.det)

}
kristianhasselknippe commented 5 years ago

Example

function main() {
    let one = 1
    message('one')
    let two = 2
    message('two')
    let three = 3
    message('three')
    let four = 4
    message('four')
}

becomes

(cl-defun main ()
    (block block42695-main
        (let ((one 1))
            (let ((two 2))
                (let ((three 3))
                    (let ((four 4))
                        (message  "four")
                    )
                    (message  "three")
                )
                (message  "two")
            )
            (message  "one")
        )
    )
)

which effectively intverts the order of execution in this case

kristianhasselknippe commented 5 years ago

However

function main() {
    message('one')
    message('two')
    message('three')
    message('four')
}

gives

(cl-defun main ()
    (block block65310-main
        (message  "one")
        (message  "two")
        (message  "three")
        (message  "four")
    )
)