diff options
author | flywind <xzsflywind@gmail.com> | 2022-04-27 02:14:39 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-04-26 20:14:39 +0200 |
commit | 8bfc396a4dfa722239818f399a119452a53fe07f (patch) | |
tree | faa97a1e5566de2e71a791264691fe2783260d44 /compiler/ccgexprs.nim | |
parent | ef4ac5a0d23fcffac9963670b73fa69ad0d0aa73 (diff) | |
download | Nim-8bfc396a4dfa722239818f399a119452a53fe07f.tar.gz |
fixes #18612; apply cache and memcmp for methods in arc/orc (#19749)
* try using endsWith * use memcmp * add cache * cleanup * better * minor * fix * improve test coverage for methods with ARC
Diffstat (limited to 'compiler/ccgexprs.nim')
-rw-r--r-- | compiler/ccgexprs.nim | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/compiler/ccgexprs.nim b/compiler/ccgexprs.nim index 5a58b4bcd..8e7a21c67 100644 --- a/compiler/ccgexprs.nim +++ b/compiler/ccgexprs.nim @@ -1615,8 +1615,11 @@ proc genNewFinalize(p: BProc, e: PNode) = proc genOfHelper(p: BProc; dest: PType; a: Rope; info: TLineInfo): Rope = if optTinyRtti in p.config.globalOptions: - result = ropecg(p.module, "#isObj($1.m_type, $2)", - [a, genTypeInfo2Name(p.module, dest)]) + let ti = genTypeInfo2Name(p.module, dest) + inc p.module.labels + let cache = "Nim_OfCheck_CACHE" & p.module.labels.rope + p.module.s[cfsVars].addf("static TNimTypeV2* $#[2];$n", [cache]) + result = ropecg(p.module, "#isObjWithCache($#.m_type, $#, $#)", [a, ti, cache]) else: # unfortunately 'genTypeInfoV1' sets tfObjHasKids as a side effect, so we # have to call it here first: |