discard """ output: '''foo js 3.14 7 1 -21550 -21550 none(TT) () destroyed destroyed ''' """ # This file tests the JavaScript generator doAssert getCurrentException() == nil doAssert getCurrentExceptionMsg() == "" # #335 proc foo() = var bar = "foo" proc baz() = echo bar baz() foo() # #376 when not defined(js): proc foo(val: float): string = "no js " & $val else: proc foo(val: float): string = "js " & $val echo foo(3.14) # #2495 type C = concept x proc test(x: C, T: typedesc): T = cast[T](x) echo 7.test(int8) # #4222 const someConst = [ "1"] proc procThatRefersToConst() # Forward decl procThatRefersToConst() # Call bar before it is defined proc procThatRefersToConst() = var i = 0 # Use a var index, otherwise nim will constfold foo[0] echo someConst[i] # JS exception here: foo is still not initialized (undefined) # bug #6753 let x = -1861876800 const y = 86400 echo (x - (y - 1)) div y # Now gives `-21550` proc foo09() = let x = -1861876800 const y = 86400 echo (x - (y - 1)) div y # Still gives `-21551` foo09() import std/options type TT = object proc `=destroy`(x: TT) = echo "destroyed" func test1: Option[TT] = discard func test2: TT = discard echo test1() # Crash in JS backend, not crash in C backend echo test2() # Not crash