adds support for functor in member (#22433)

* adds support for functor in member

* improves functor test
This commit is contained in:
Juan M Gómez
2023-08-10 13:15:23 +01:00
committed by GitHub
parent 05f7c4f79d
commit 8625e71250
2 changed files with 17 additions and 1 deletions

View File

@@ -1149,14 +1149,19 @@ proc isReloadable(m: BModule; prc: PSym): bool =
proc isNonReloadable(m: BModule; prc: PSym): bool =
return m.hcrOn and sfNonReloadable in prc.flags
proc parseVFunctionDecl(val: string; name, params, retType, superCall: var string; isFnConst, isOverride, isMemberVirtual: var bool; isCtor: bool) =
proc parseVFunctionDecl(val: string; name, params, retType, superCall: var string; isFnConst, isOverride, isMemberVirtual: var bool; isCtor: bool, isFunctor=false) =
var afterParams: string = ""
if scanf(val, "$*($*)$s$*", name, params, afterParams):
if name.strip() == "operator" and params == "": #isFunctor?
parseVFunctionDecl(afterParams, name, params, retType, superCall, isFnConst, isOverride, isMemberVirtual, isCtor, true)
return
isFnConst = afterParams.find("const") > -1
isOverride = afterParams.find("override") > -1
isMemberVirtual = name.find("virtual ") > -1
if isMemberVirtual:
name = name.replace("virtual ", "")
if isFunctor:
name = "operator ()"
if isCtor:
discard scanf(afterParams, ":$s$*", superCall)
else:

View File

@@ -7,6 +7,7 @@ false
hello foo
hello boo
hello boo
FunctorSupport!
destructing
destructing
'''
@@ -51,3 +52,13 @@ let booAsFoo = cast[FooPtr](newCpp[Boo]())
foo.salute()
boo.salute()
booAsFoo.salute()
type
NimFunctor = object
discard
proc invoke(f: NimFunctor, n:int) {.member:"operator ()('2 #2)" .} =
echo "FunctorSupport!"
{.experimental: "callOperator".}
proc `()`(f: NimFunctor, n:int) {.importcpp:"#(@)" .}
NimFunctor()(1)