From 28386a5943b6dff9d5cd37263116070410c686ea Mon Sep 17 00:00:00 2001 From: Cuecuexiaoyu Date: Fri, 29 Aug 2025 14:53:46 +0800 Subject: [PATCH] step debug Signed-off-by: Cuecuexiaoyu Change-Id: Iba72a23a8252f3eee3e43171a825c181c3e4c191 --- koala-wrapper/native/src/bridges.cc | 10 +++++ koala-wrapper/native/src/common.cc | 38 +++++++++++++++++++ koala-wrapper/src/Es2pandaNativeModule.ts | 6 +++ koala-wrapper/src/arkts-api/peers/AstNode.ts | 9 +++++ .../src/arkts-api/utilities/public.ts | 4 ++ 5 files changed, 67 insertions(+) diff --git a/koala-wrapper/native/src/bridges.cc b/koala-wrapper/native/src/bridges.cc index 28f6a4cc9..5eefe34d8 100644 --- a/koala-wrapper/native/src/bridges.cc +++ b/koala-wrapper/native/src/bridges.cc @@ -632,6 +632,16 @@ void impl_AstNodeSetStart(KNativePointer context, KNativePointer receiver, KNati } KOALA_INTEROP_V3(AstNodeSetStart, KNativePointer, KNativePointer, KNativePointer) +void impl_AstNodeSetRange(KNativePointer context, KNativePointer receiver, KNativePointer range) +{ + const auto _context = reinterpret_cast(context); + const auto _receiver = reinterpret_cast(receiver); + const auto _range = reinterpret_cast(range); + GetImpl()->AstNodeSetRange(_context, _receiver, _range); + return; +} +KOALA_INTEROP_V3(AstNodeSetRange, KNativePointer, KNativePointer, KNativePointer); + KNativePointer impl_AstNodeEndConst(KNativePointer context, KNativePointer receiver) { const auto _context = reinterpret_cast(context); diff --git a/koala-wrapper/native/src/common.cc b/koala-wrapper/native/src/common.cc index 29baa82db..2e8655803 100644 --- a/koala-wrapper/native/src/common.cc +++ b/koala-wrapper/native/src/common.cc @@ -363,6 +363,44 @@ KBoolean impl_ProgramCanSkipPhases(KNativePointer context, KNativePointer progra } KOALA_INTEROP_2(ProgramCanSkipPhases, KBoolean, KNativePointer, KNativePointer) +// 1. 线程局部变量只保留 context 指针 +thread_local es2panda_Context *cachedCtx; + +// 2. 全局(或局部)指针,指向当前父节点的 range +static es2panda_SourceRange *cachedParentRange = nullptr; + +// 3. 给子节点设置 range +static void SetChildRange(es2panda_AstNode *child) +{ + GetImpl()->AstNodeSetRange(cachedCtx, child, cachedParentRange); +} + +// 4. 对每个父节点执行的回调 +static void PropagateParentRange(es2panda_AstNode *parent, void *arg) +{ + cachedCtx = static_cast(arg); + + // 拿到父节点的 range 指针 + es2panda_SourceRange *parentRange = GetImpl()->AstNodeRangeConst(cachedCtx, parent); + cachedParentRange = parentRange; // 只用指针,不拷贝值 + + GetImpl()->AstNodeIterateConst(cachedCtx, parent, SetChildRange); +} + +// 5. 导出函数保持不变 +KNativePointer impl_AstNodeSetAllRange(KNativePointer contextPtr, + KNativePointer programPtr) +{ + auto context = reinterpret_cast(contextPtr); + auto program = reinterpret_cast(programPtr); + + GetImpl()->AstNodeForEach(program, PropagateParentRange, context); + return program; +} + +KOALA_INTEROP_2(AstNodeSetAllRange, + KNativePointer, KNativePointer, KNativePointer) + /* ----------------------------------------------------------------------------------------------------------------------------- */ diff --git a/koala-wrapper/src/Es2pandaNativeModule.ts b/koala-wrapper/src/Es2pandaNativeModule.ts index 2939516b8..02335887b 100644 --- a/koala-wrapper/src/Es2pandaNativeModule.ts +++ b/koala-wrapper/src/Es2pandaNativeModule.ts @@ -684,6 +684,9 @@ export class Es2pandaNativeModule { _AstNodeUpdateAll(context: KPtr, node: KPtr): void { throw new Error('Not implemented'); } + _AstNodeSetAllRange(context: KPtr, node: KPtr): void { + throw new Error('Not implemented'); + } _AstNodeSetOriginalNode(context: KPtr, ast: KPtr, originalNode: KPtr): void { throw new Error('Not implemented'); } @@ -741,6 +744,9 @@ export class Es2pandaNativeModule { _IsETSUnionType(ast: KPtr): KBoolean { throw new Error('Not implemented'); } + _AstNodeSetRange(context: KNativePointer, node: KNativePointer, range: KNativePointer): KNativePointer { + throw new Error('Not implemented'); + } _IsETSFunctionType(ast: KPtr): KBoolean { throw new Error('Not implemented'); diff --git a/koala-wrapper/src/arkts-api/peers/AstNode.ts b/koala-wrapper/src/arkts-api/peers/AstNode.ts index 6d49f5da9..b98bfb617 100644 --- a/koala-wrapper/src/arkts-api/peers/AstNode.ts +++ b/koala-wrapper/src/arkts-api/peers/AstNode.ts @@ -20,6 +20,7 @@ import { throwError } from '../../utils'; import { Es2pandaModifierFlags } from '../../generated/Es2pandaEnums'; import { ArktsObject } from './ArktsObject'; import { SourcePosition } from './SourcePosition'; +import { SourceRange } from './SourceRange'; export abstract class AstNode extends ArktsObject { protected constructor(peer: KNativePointer) { @@ -152,6 +153,14 @@ export abstract class AstNode extends ArktsObject { public set endPosition(end: SourcePosition) { global.es2panda._AstNodeSetEnd(global.context, this.peer, end.peer); } + + public get range(): SourceRange { + return new SourceRange(global.es2panda._AstNodeRangeConst(global.context, this.peer)); + } + + public set range(range: SourceRange) { + global.es2panda._AstNodeSetRange(global.context, this.peer, range.peer); + } } export class UnsupportedNode extends AstNode { diff --git a/koala-wrapper/src/arkts-api/utilities/public.ts b/koala-wrapper/src/arkts-api/utilities/public.ts index 834f12cce..a2efe71c3 100644 --- a/koala-wrapper/src/arkts-api/utilities/public.ts +++ b/koala-wrapper/src/arkts-api/utilities/public.ts @@ -261,6 +261,10 @@ export function setAllParents(ast: AstNode): void { global.es2panda._AstNodeUpdateAll(global.context, ast.peer); } +export function AstNodeSetAllRange(ast: AstNode): void { + global.es2panda._AstNodeSetAllRange(global.context, ast.peer); +} + export function generateTsDeclarationsFromContext( outputDeclEts: string, outputEts: string, -- Gitee