New version of js console using macros - avoid the use of .apply method
This commit is contained in:
parent
4c52239394
commit
f0308e9bcf
1 changed files with 22 additions and 4 deletions
|
|
@ -13,14 +13,32 @@
|
||||||
when not defined(js) and not defined(Nimdoc):
|
when not defined(js) and not defined(Nimdoc):
|
||||||
{.error: "This module only works on the JavaScript platform".}
|
{.error: "This module only works on the JavaScript platform".}
|
||||||
|
|
||||||
|
import macros
|
||||||
|
|
||||||
type Console* {.importc.} = ref object of RootObj
|
type Console* {.importc.} = ref object of RootObj
|
||||||
|
|
||||||
proc convertToConsoleLoggable*[T](v: T): RootRef {.importcpp: "#".}
|
proc convertToConsoleLoggable*[T](v: T): RootRef {.importcpp: "#".}
|
||||||
template convertToConsoleLoggable*(v: string): RootRef = cast[RootRef](cstring(v))
|
template convertToConsoleLoggable*(v: string): RootRef = cast[RootRef](cstring(v))
|
||||||
|
|
||||||
proc log*(console: Console, args: varargs[RootRef, convertToConsoleLoggable]) {.importcpp: "#.log.apply(null, #)".}
|
proc logImpl(console: Console) {.importcpp: "log", varargs.}
|
||||||
proc debug*(console: Console, args: varargs[RootRef, convertToConsoleLoggable]) {.importcpp: "#.debug.apply(null, #)".}
|
proc debugImpl(console: Console) {.importcpp: "debug", varargs.}
|
||||||
proc info*(console: Console, args: varargs[RootRef, convertToConsoleLoggable]) {.importcpp: "#.info.apply(null, #)".}
|
proc infoImpl(console: Console) {.importcpp: "info", varargs.}
|
||||||
proc error*(console: Console, args: varargs[RootRef, convertToConsoleLoggable]) {.importcpp: "#.error.apply(null, #)".}
|
proc errorImpl(console: Console) {.importcpp: "error", varargs.}
|
||||||
|
|
||||||
|
proc makeConsoleCall(console: NimNode, procName: NimNode, args: NimNode): NimNode =
|
||||||
|
result = newCall(procName, console)
|
||||||
|
for c in args: result.add(c)
|
||||||
|
|
||||||
|
macro log*(console: Console, args: varargs[RootRef, convertToConsoleLoggable]): untyped =
|
||||||
|
makeConsoleCall(console, bindSym "logImpl", args)
|
||||||
|
|
||||||
|
macro debug*(console: Console, args: varargs[RootRef, convertToConsoleLoggable]): untyped =
|
||||||
|
makeConsoleCall(console, bindSym "debugImpl", args)
|
||||||
|
|
||||||
|
macro info*(console: Console, args: varargs[RootRef, convertToConsoleLoggable]): untyped =
|
||||||
|
makeConsoleCall(console, bindSym "infoImpl", args)
|
||||||
|
|
||||||
|
macro error*(console: Console, args: varargs[RootRef, convertToConsoleLoggable]): untyped =
|
||||||
|
makeConsoleCall(console, bindSym "errorImpl", args)
|
||||||
|
|
||||||
var console* {.importc, nodecl.}: Console
|
var console* {.importc, nodecl.}: Console
|
||||||
Loading…
Add table
Add a link
Reference in a new issue