diff --git a/arkoala-arkts/libarkts/native/src/bridges.cc b/arkoala-arkts/libarkts/native/src/bridges.cc index 1900f813733d455b6ed730955632f580e6ced15c..179792561d9cb7fdd0a99f3cd5080c3c3b8e179d 100644 --- a/arkoala-arkts/libarkts/native/src/bridges.cc +++ b/arkoala-arkts/libarkts/native/src/bridges.cc @@ -202,25 +202,6 @@ KNativePointer impl_ClassDefinitionIdent( } KOALA_INTEROP_2(ClassDefinitionIdent, KNativePointer, KNativePointer, KNativePointer) -KNativePointer impl_CreateClassDefinition1( - KNativePointer contextPtr, - KNativePointer identPtr, - KNativePointerArray bodyPtr, - KInt bodyLenT, - KInt modifiersT, - KInt flagsT -) { - auto context = reinterpret_cast(contextPtr); - auto ident = reinterpret_cast(identPtr); - auto body = reinterpret_cast(bodyPtr); - auto bodyLen = static_cast(bodyLenT); - auto modifiers = Es2pandaClassDefinitionModifiers(modifiersT); - auto flags = Es2pandaModifierFlags(flagsT); - - return GetImpl()->CreateClassDefinition1(context, ident, body, bodyLen, modifiers, flags); -} -KOALA_INTEROP_6(CreateClassDefinition1, KNativePointer, KNativePointer, KNativePointer, KNativePointerArray, KInt, KInt, KInt) - KNativePointer impl_UpdateClassDefinition1( KNativePointer contextPtr, KNativePointer originalPtr, diff --git a/arkoala-arkts/libarkts/native/src/generated/bridges.cc b/arkoala-arkts/libarkts/native/src/generated/bridges.cc index 3f7fa2304bbe27893159d11b0c21d5dd1f6f28f2..d05487e2916171a6c2ab93b413936801afa6118a 100644 --- a/arkoala-arkts/libarkts/native/src/generated/bridges.cc +++ b/arkoala-arkts/libarkts/native/src/generated/bridges.cc @@ -91,3 +91,16 @@ void impl_BlockStatementSetStatements(KNativePointer context, KNativePointer rec GetImpl()->BlockStatementSetStatements(_context, _receiver, _statementList, _statementListLen); } KOALA_INTEROP_V4(BlockStatementSetStatements, KNativePointer, KNativePointer, KNativePointerArray, KUInt); + +KNativePointer impl_CreateClassDefinition1(KNativePointer context, KNativePointer ident, KNativePointerArray body, KUInt bodyLen, KInt modifiers, KInt flags) +{ + const auto _context = reinterpret_cast(context); + const auto _ident = reinterpret_cast(ident); + const auto _body = reinterpret_cast(body); + const auto _bodyLen = static_cast(bodyLen); + const auto _modifiers = static_cast(modifiers); + const auto _flags = static_cast(flags); + const auto result = GetImpl()->CreateClassDefinition1(_context, _ident, _body, _bodyLen, _modifiers, _flags); + return result; +} +KOALA_INTEROP_6(CreateClassDefinition1, KNativePointer, KNativePointer, KNativePointer, KNativePointerArray, KUInt, KInt, KInt); diff --git a/arkoala-arkts/libarkts/src/arkts-api/factory/nodeFactory.ts b/arkoala-arkts/libarkts/src/arkts-api/factory/nodeFactory.ts index ecf51582fe3907ff9bb9a79b9449fb9a256fc5e2..c600bff2f5f475e98fa8fe410336bed5224041be 100644 --- a/arkoala-arkts/libarkts/src/arkts-api/factory/nodeFactory.ts +++ b/arkoala-arkts/libarkts/src/arkts-api/factory/nodeFactory.ts @@ -47,8 +47,8 @@ export const factory = { createMemberExpression: arkts.MemberExpression.create, updateMemberExpression: compose(arkts.MemberExpression.create), - createEtsScript: arkts.EtsScript.create, - updateEtsScript: arkts.EtsScript.update, + createEtsScript: arkts.EtsScript.createFromSource, + updateEtsScript: arkts.EtsScript.updateByStatements, createFunctionDeclaration: arkts.FunctionDeclaration.create, updateFunctionDeclaration: compose(arkts.FunctionDeclaration.create), diff --git a/arkoala-arkts/libarkts/src/arkts-api/static/global.ts b/arkoala-arkts/libarkts/src/arkts-api/static/global.ts index 3b581fd75097d68ff6dde1a448beeb143ab5702e..0b938b96044df5d79f29ade3f66eca44a76ff936 100644 --- a/arkoala-arkts/libarkts/src/arkts-api/static/global.ts +++ b/arkoala-arkts/libarkts/src/arkts-api/static/global.ts @@ -19,6 +19,8 @@ import { initEs2panda, Es2pandaNativeModule } from "../../handwritten/Es2pandaNa import { initInterop, InteropNativeModule } from "../../InteropNativeModule" export default class global { + public static filePath: string = "./examples/input/main.sts" + private static _config?: KNativePointer public static set config(config: KNativePointer) { if (global._config !== undefined) { @@ -29,7 +31,7 @@ export default class global { public static get config(): KNativePointer { return global._config ?? throwError('Global.config not initialized') } - public static isInitializedConfig(): boolean { + public static configIsInitialized(): boolean { return global._config !== undefined } diff --git a/arkoala-arkts/libarkts/src/arkts-api/types.ts b/arkoala-arkts/libarkts/src/arkts-api/types.ts index 9e7eb8bbdd52c711ae0d4643dd8dd32c27b62ec9..23d636b37124aacd01d8374fae8cf03954a42579 100644 --- a/arkoala-arkts/libarkts/src/arkts-api/types.ts +++ b/arkoala-arkts/libarkts/src/arkts-api/types.ts @@ -181,46 +181,95 @@ export class UnsupportedNode extends Node { export class Config extends ArktsObject { constructor(peer: KPtr) { super(peer) + // TODO: wait for getter from api + this.path = `` } + + static create( + input: readonly string[] + ): Config { + return new Config( + global.es2panda._CreateConfig(input.length, passStringArray(input)) + ) + } + + static createDefault(): Config { + if (global.configIsInitialized()) { + console.warn(`Config already initialized`) + return new Config( + global.config + ) + } + return new Config( + global.es2panda._CreateConfig( + 4, + passStringArray(["", "--arktsconfig", "./arktsconfig.json", global.filePath]) + ) + ) + } + + readonly path: string } export class Context extends ArktsObject { constructor(peer: KPtr) { super(peer) } + + // TODO: + // static create + + static createFromString( + source: string + ): Context { + if (!global.configIsInitialized()) { + throwError(`Config not initialized`) + } + return new Context( + global.es2panda._CreateContextFromString( + global.config, + passString(source), + passString(global.filePath) + ) + ) + } } export class EtsScript extends Node { constructor(peer: KPtr) { assertValidPeer(peer, Es2pandaAstNodeType.AST_NODE_TYPE_ETS_MODULE) - if (!global.es2panda._IsProgram(global.context, peer)) { - throwError('peer expected to be Program') - } super(peer) } - // TODO: rewrite - static create( + // TODO: + // static create( + // statementList: Statement[] + // ): EtsScript { + // } + + static fromContext(): EtsScript { + return new EtsScript(global.es2panda._ProgramAst(global.es2panda._ContextProgram(global.context))) + } + + /** + * @deprecated + */ + static createFromSource( source: string, state: Es2pandaContextState = Es2pandaContextState.ES2PANDA_STATE_PARSED, ): EtsScript { - if (!global.isInitializedConfig()) { - global.config = global.es2panda._CreateConfig( - 4, - passStringArray(["", "--arktsconfig", "./arktsconfig.json", "./examples/input/main.sts"]) - ) + if (!global.configIsInitialized()) { + global.config = Config.createDefault().peer } - global.context = global.es2panda._CreateContextFromString( - global.config, - passString(source), - passString("./examples/input/main.sts") - ) + global.context = Context.createFromString(source).peer proceedToState(state) return new EtsScript(global.es2panda._ProgramAst(global.es2panda._ContextProgram(global.context))) } - // TODO: should create new node - static update( + /** + * @deprecated + */ + static updateByStatements( node: EtsScript, statements: readonly Node[], ): EtsScript { diff --git a/arkoala-arkts/libarkts/src/arkts-api/utilities/private.ts b/arkoala-arkts/libarkts/src/arkts-api/utilities/private.ts index e84ae1bb98c3697baa7deb31a198e5343e3ea785..8e64067d830e664385ea6b03c57180d6d90303f7 100644 --- a/arkoala-arkts/libarkts/src/arkts-api/utilities/private.ts +++ b/arkoala-arkts/libarkts/src/arkts-api/utilities/private.ts @@ -137,7 +137,7 @@ export function passString(str: string | undefined): string { return withString(str, (it: string) => it) } -export function passStringArray(strings: string[]): string[] { +export function passStringArray(strings: readonly string[]): string[] { return withStringArray(strings, (it: string[]) => it) } diff --git a/arkoala-arkts/libarkts/src/arkts-api/utilities/public.ts b/arkoala-arkts/libarkts/src/arkts-api/utilities/public.ts index ffb6f8da40f5d6030c0cfbe6456bd28a4ee1fa29..3f80d22cfbe532261d476e2b1816d0abf61891ea 100644 --- a/arkoala-arkts/libarkts/src/arkts-api/utilities/public.ts +++ b/arkoala-arkts/libarkts/src/arkts-api/utilities/public.ts @@ -21,32 +21,6 @@ import { Es2pandaContextState, } from ".." -export function getAstFromContext(): KNativePointer { - return global.es2panda._ProgramAst( - global.es2panda._ContextProgram(global.context) - ) -} - -export function createAstDumper(peer: KNativePointer, source: string): KNativePointer { - return withString(source, (_source: string) => - global.es2panda._CreateAstDumper(global.context, peer, _source) - ) -} - -export function createConfig(input: string[]): KNativePointer { - return withStringArray(input, (stringArray: string[]) => - global.es2panda._CreateConfig(input.length, stringArray) - ) -} - -export function createContextFromString(config: KNativePointer, source: string, filename: string): KNativePointer { - return withString(source, (sourcePtr: string) => - withString(filename, (filenamePtr: string) => - global.es2panda._CreateContextFromString(config, sourcePtr, filenamePtr) - ) - ) -} - export function proceedToState(state: Es2pandaContextState): void { if (state <= global.es2panda._ContextState(global.context)) { return diff --git a/arkoala-arkts/libarkts/src/es2panda.ts b/arkoala-arkts/libarkts/src/es2panda.ts index 57ed1f57bf353a0c2efdbb28ff610fcdfffa5e90..ae43bd70df87eb2816ea3520324e2009182a0491 100644 --- a/arkoala-arkts/libarkts/src/es2panda.ts +++ b/arkoala-arkts/libarkts/src/es2panda.ts @@ -34,7 +34,7 @@ function parseCommandLineArgs() { function insertPlugin(pluginsByState: Map void>, state: arkts.Es2pandaContextState, dumpAst: boolean): arkts.Node { arkts.proceedToState(state) - const script = arkts.unpackNode(arkts.getAstFromContext()) + const script = arkts.EtsScript.fromContext() if (script === undefined) { throwError(`Failed to receive ast from es2panda`) } @@ -58,11 +58,8 @@ function insertPlugin(pluginsByState: Map { console.log('out') ` - let script = arkts.EtsScript.create(sample_in) + let script = arkts.EtsScript.createFromSource(sample_in) - script = arkts.EtsScript.update( + script = arkts.EtsScript.updateByStatements( script, [ script.statements[0], diff --git a/arkoala-arkts/libarkts/test/arkts-api/functions/create.test.ts b/arkoala-arkts/libarkts/test/arkts-api/functions/create.test.ts index 2238c3987e67daa3dca4e80ba1c70e19171ee2f6..10a452f91175de7732c51425e562f6f4fe7dc736 100644 --- a/arkoala-arkts/libarkts/test/arkts-api/functions/create.test.ts +++ b/arkoala-arkts/libarkts/test/arkts-api/functions/create.test.ts @@ -17,9 +17,9 @@ suite(util.basename(__filename), () => { foo() ` - let script = arkts.EtsScript.create(sample_in) + let script = arkts.EtsScript.createFromSource(sample_in) - script = arkts.EtsScript.update( + script = arkts.EtsScript.updateByStatements( script, [ script.statements[0], @@ -98,9 +98,9 @@ suite(util.basename(__filename), () => { foo(0) ` - let script = arkts.EtsScript.create(sample_in) + let script = arkts.EtsScript.createFromSource(sample_in) - script = arkts.EtsScript.update( + script = arkts.EtsScript.updateByStatements( script, [ script.statements[0], diff --git a/arkoala-arkts/libarkts/test/arkts-api/general/annotations.test.ts b/arkoala-arkts/libarkts/test/arkts-api/general/annotations.test.ts index d240a48f32d483dfab44ac44ddac12da065ab17f..1f1335b877c023d7004ccf25fec13f8a6b06e193 100644 --- a/arkoala-arkts/libarkts/test/arkts-api/general/annotations.test.ts +++ b/arkoala-arkts/libarkts/test/arkts-api/general/annotations.test.ts @@ -11,7 +11,7 @@ suite(util.basename(__filename), () => { function foo() {} ` - let script = arkts.EtsScript.create( + let script = arkts.EtsScript.createFromSource( sample_in, arkts.Es2pandaContextState.ES2PANDA_STATE_PARSED ) diff --git a/arkoala-arkts/libarkts/test/arkts-api/general/basic.test.ts b/arkoala-arkts/libarkts/test/arkts-api/general/basic.test.ts index e6308b49ad322f8875c89a98d75ae093913e9ac9..fd4ea1c60ddd788381e12afdb544235735ca0c1a 100644 --- a/arkoala-arkts/libarkts/test/arkts-api/general/basic.test.ts +++ b/arkoala-arkts/libarkts/test/arkts-api/general/basic.test.ts @@ -8,9 +8,9 @@ suite(util.basename(__filename), () => { ` ` - let script = arkts.EtsScript.create(sample_in) + let script = arkts.EtsScript.createFromSource(sample_in) - script = arkts.EtsScript.update( + script = arkts.EtsScript.updateByStatements( script, [ arkts.factory.createExpressionStatement( diff --git a/arkoala-arkts/libarkts/test/arkts-api/general/recheck.test.ts b/arkoala-arkts/libarkts/test/arkts-api/general/recheck.test.ts index ec8378f550b224a675e4336a35198a1f3b68d3cb..0e8b46a41c5529e3b6b71b7f3b29366ff1fb9b55 100644 --- a/arkoala-arkts/libarkts/test/arkts-api/general/recheck.test.ts +++ b/arkoala-arkts/libarkts/test/arkts-api/general/recheck.test.ts @@ -9,7 +9,7 @@ suite(util.basename(__filename), () => { function foo() {} ` - let script = arkts.EtsScript.create( + let script = arkts.EtsScript.createFromSource( sample_in, arkts.Es2pandaContextState.ES2PANDA_STATE_PARSED ) @@ -20,7 +20,7 @@ suite(util.basename(__filename), () => { ) ) - script = arkts.EtsScript.update( + script = arkts.EtsScript.updateByStatements( script, [ expr diff --git a/arkoala-arkts/libarkts/test/arkts-api/import-export/import.test.ts b/arkoala-arkts/libarkts/test/arkts-api/import-export/import.test.ts index 1ac4212f0b143f5ece49895b2442b20ac610d27e..7dc62ad09437cb471cf7de677746f3d21976f593 100644 --- a/arkoala-arkts/libarkts/test/arkts-api/import-export/import.test.ts +++ b/arkoala-arkts/libarkts/test/arkts-api/import-export/import.test.ts @@ -8,9 +8,9 @@ suite(util.basename(__filename), () => { ` ` - let script = arkts.EtsScript.create(sample_in) + let script = arkts.EtsScript.createFromSource(sample_in) - script = arkts.EtsScript.update( + script = arkts.EtsScript.updateByStatements( script, [ arkts.factory.createImportDeclaration( @@ -48,10 +48,10 @@ suite(util.basename(__filename), () => { import { Y } from "./variable" ` - let script = arkts.EtsScript.create(sample_in) + let script = arkts.EtsScript.createFromSource(sample_in) const importDeclaration = script.statements[0] as arkts.EtsImportDeclaration - script = arkts.EtsScript.update( + script = arkts.EtsScript.updateByStatements( script, [ arkts.factory.updateImportDeclaration( @@ -92,10 +92,10 @@ suite(util.basename(__filename), () => { } ` - let script = arkts.EtsScript.create(sample_in) + let script = arkts.EtsScript.createFromSource(sample_in) const importDeclaration = script.statements[0] as arkts.EtsImportDeclaration - script = arkts.EtsScript.update( + script = arkts.EtsScript.updateByStatements( script, [ arkts.factory.updateImportDeclaration( @@ -143,11 +143,11 @@ suite(util.basename(__filename), () => { function main() {} ` - let script = arkts.EtsScript.create(sample_in) + let script = arkts.EtsScript.createFromSource(sample_in) const functionDeclaration: arkts.FunctionDeclaration = script.statements[1] as arkts.FunctionDeclaration const scriptFunction: arkts.ScriptFunction = functionDeclaration.scriptFunction - script = arkts.EtsScript.update( + script = arkts.EtsScript.updateByStatements( script, [ script.statements[0], diff --git a/arkoala-arkts/libarkts/test/test-util.ts b/arkoala-arkts/libarkts/test/test-util.ts index 434713a001da17732c2d027d57dba9bd2ac03fa3..f247d51f2e199c75431477caabec09ee56df6aed 100644 --- a/arkoala-arkts/libarkts/test/test-util.ts +++ b/arkoala-arkts/libarkts/test/test-util.ts @@ -85,7 +85,7 @@ export function ARKTS_TEST_ASSERTION(node: arkts.EtsScript, source: string, stat global.es2panda._DestroyContext(global.context) try { - const script = arkts.EtsScript.create(source, finalState) + const script = arkts.EtsScript.createFromSource(source, finalState) assertEqualsSource(src, script.dumpSrc(), 'Error on SOURCE comparison') assert.equal(ast, script.dumpJson(), 'Error on JSON comparison') assert.equal(dump, script.dump(), 'Error on DUMP comparison')