mirror of
https://github.com/nim-lang/Nim.git
synced 2026-07-19 23:41:29 +00:00
proc params as syms (#15332)
* proc params are now syms * Fix typesrenderer * Add testcase for disrupteks issue * fix test * Trigger build * Trigger build * Trigger build Co-authored-by: Clyybber <darkmine956@gmail.com>
This commit is contained in:
@@ -1286,6 +1286,7 @@ proc semProcTypeNode(c: PContext, n, genericParams: PNode,
|
||||
addParamOrResult(c, arg, kind)
|
||||
styleCheckDef(c.config, a[j].info, arg)
|
||||
onDef(a[j].info, arg)
|
||||
a[j] = newSymNode(arg)
|
||||
|
||||
var r: PType
|
||||
if n[0].kind != nkEmpty:
|
||||
|
||||
@@ -67,7 +67,7 @@ proc renderType(n: PNode): string =
|
||||
let typeStr = renderType(n[typePos])
|
||||
result = typeStr
|
||||
for i in 1..<typePos:
|
||||
assert n[i].kind == nkIdent
|
||||
assert n[i].kind in {nkSym, nkIdent}
|
||||
result.add(',' & typeStr)
|
||||
of nkTupleTy:
|
||||
result = "tuple["
|
||||
|
||||
@@ -458,6 +458,14 @@ macro `{}`*(typ: typedesc, xs: varargs[untyped]): auto =
|
||||
# Macro to build a lambda using JavaScript's `this`
|
||||
# from a proc, `this` being the first argument.
|
||||
|
||||
proc replaceSyms(n: NimNode): NimNode =
|
||||
if n.kind == nnkSym:
|
||||
result = newIdentNode($n)
|
||||
else:
|
||||
result = n
|
||||
for i in 0..<n.len:
|
||||
result[i] = replaceSyms(n[i])
|
||||
|
||||
macro bindMethod*(procedure: typed): auto =
|
||||
## Takes the name of a procedure and wraps it into a lambda missing the first
|
||||
## argument, which passes the JavaScript builtin ``this`` as the first
|
||||
@@ -491,7 +499,7 @@ macro bindMethod*(procedure: typed): auto =
|
||||
getImpl(procedure)
|
||||
else:
|
||||
procedure
|
||||
args = rawProc[3]
|
||||
args = rawProc[3].copyNimTree.replaceSyms
|
||||
thisType = args[1][1]
|
||||
params = newNimNode(nnkFormalParams).add(args[0])
|
||||
body = newNimNode(nnkLambda)
|
||||
|
||||
@@ -237,3 +237,11 @@ noop:
|
||||
makeVar
|
||||
echo tensorY
|
||||
|
||||
macro xbenchmark(body: typed): untyped =
|
||||
result = body
|
||||
|
||||
xbenchmark:
|
||||
proc fastSHA(inputtest: string) =
|
||||
discard inputtest
|
||||
fastSHA("hey")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user