mirror of
https://github.com/nim-lang/Nim.git
synced 2026-01-07 13:33:22 +00:00
Perform lambda lifting for compile-time stuff when targeting JS. Enable unittest test.
This commit is contained in:
@@ -946,7 +946,11 @@ proc transformOuterProc(o: POuterContext, n: PNode; it: TIter): PNode =
|
||||
proc liftLambdas*(fn: PSym, body: PNode): PNode =
|
||||
# XXX gCmd == cmdCompileToJS does not suffice! The compiletime stuff needs
|
||||
# the transformation even when compiling to JS ...
|
||||
if body.kind == nkEmpty or gCmd == cmdCompileToJS or
|
||||
|
||||
# However we can do lifting for the stuff which is *only* compiletime.
|
||||
let isCompileTime = sfCompileTime in fn.flags or fn.kind == skMacro
|
||||
|
||||
if body.kind == nkEmpty or (gCmd == cmdCompileToJS and not isCompileTime) or
|
||||
fn.skipGenericOwner.kind != skModule:
|
||||
# ignore forward declaration:
|
||||
result = body
|
||||
|
||||
@@ -99,8 +99,9 @@ template test*(name: expr, body: stmt): stmt {.immediate, dirty.} =
|
||||
body
|
||||
|
||||
except:
|
||||
checkpoint("Unhandled exception: " & getCurrentExceptionMsg())
|
||||
echo getCurrentException().getStackTrace()
|
||||
when not defined(js):
|
||||
checkpoint("Unhandled exception: " & getCurrentExceptionMsg())
|
||||
echo getCurrentException().getStackTrace()
|
||||
fail()
|
||||
|
||||
finally:
|
||||
@@ -114,9 +115,7 @@ proc checkpoint*(msg: string) =
|
||||
template fail* =
|
||||
bind checkpoints
|
||||
for msg in items(checkpoints):
|
||||
# this used to be 'echo' which now breaks due to a bug. XXX will revisit
|
||||
# this issue later.
|
||||
stdout.writeln msg
|
||||
echo msg
|
||||
|
||||
when not defined(ECMAScript):
|
||||
if abortOnError: quit(1)
|
||||
|
||||
@@ -1,10 +1,7 @@
|
||||
discard """
|
||||
disabled: "true"
|
||||
output: '''[OK] >:)'''
|
||||
"""
|
||||
|
||||
# Unittest uses lambdalifting at compile-time which we disable for the JS
|
||||
# codegen! So this cannot and will not work for quite some time.
|
||||
|
||||
import unittest
|
||||
|
||||
suite "Bacon":
|
||||
|
||||
Reference in New Issue
Block a user