From 24e87ea3f342ae5545b5ab5115b61220c09c1725 Mon Sep 17 00:00:00 2001 From: hufeng Date: Thu, 15 Dec 2022 11:10:05 +0800 Subject: [PATCH] fixed fc5533c from https://gitee.com/hufeng20/arkcompiler_ets_frontend/pulls/765 Fix ts2abc's module variable index tests: test262,UT Signed-off-by: hufeng Change-Id: I37299ff62e02feb7ca5df70ff2c048255c3e40bd --- ts2panda/src/ecmaModule.ts | 23 +++++++-------- ts2panda/tests/esmodule.test.ts | 50 +++++++++++++++++++++++++++++++-- 2 files changed, 57 insertions(+), 16 deletions(-) diff --git a/ts2panda/src/ecmaModule.ts b/ts2panda/src/ecmaModule.ts index 2013ffd356..d785513e8e 100644 --- a/ts2panda/src/ecmaModule.ts +++ b/ts2panda/src/ecmaModule.ts @@ -149,19 +149,16 @@ export class SourceTextModuleRecord { makeIndirectExportsExplicit() { // @ts-ignore this.localExportEntries.forEach((entries: Array, localName: string) => { - for (let idx = 0; idx < entries.length;) { - let importEntry: Entry | undefined = this.regularImportEntries.get(entries[idx].localName!); - // get an indirect export entry - if (importEntry) { - entries[idx].importName = importEntry.importName; - entries[idx].moduleRequest = importEntry.moduleRequest; - entries[idx].localName = undefined; - - this.indirectExportEntries.push(entries[idx]); - entries.splice(idx, 1); - } else { - idx += 1; - } + let importEntry: Entry | undefined = this.regularImportEntries.get(localName); + if (importEntry) { + // get indirect export entries + entries.forEach(e => { + e.importName = importEntry.importName; + e.moduleRequest = importEntry.moduleRequest; + e.localName = undefined; + this.indirectExportEntries.push(e); + }); + this.localExportEntries.delete(localName); } }); } diff --git a/ts2panda/tests/esmodule.test.ts b/ts2panda/tests/esmodule.test.ts index 9c8985d79b..9014994d5d 100644 --- a/ts2panda/tests/esmodule.test.ts +++ b/ts2panda/tests/esmodule.test.ts @@ -19,6 +19,7 @@ import { import 'mocha'; import { checkInstructions, SnippetCompiler } from "./utils/base"; import { + Createobjectwithbuffer, Defineclasswithbuffer, Returnundefined, Stmodulevar, @@ -30,7 +31,9 @@ import { Sta, VReg, IRNode, - Ldexternalmodulevar + Ldexternalmodulevar, + Ldlocalmodulevar, + Stobjbyname } from "../src/irnodes"; import { CmdOptions } from '../src/cmdOptions'; import { creatAstFromSnippet } from "./utils/asthelper"; @@ -39,7 +42,7 @@ import { PandaGen } from '../src/pandagen'; describe("ExportDeclaration", function () { - it("exportClassTest ", function() { + it("exportClassTest", function() { CmdOptions.isModules = () => {return true}; CmdOptions.parseUserCmd([""]); let snippetCompiler = new SnippetCompiler(); @@ -59,7 +62,7 @@ describe("ExportDeclaration", function () { expect(checkInstructions(funcMainInsns, expected)).to.be.true; }); - it("Re-exportImportVarTest ", function() { + it("Re-exportImportVarTest", function() { CmdOptions.isModules = () => {return true}; let snippetCompiler = new SnippetCompiler(); snippetCompiler.compile(`import a from 'test.js'; let v = a; export {a};`); @@ -80,4 +83,45 @@ describe("ExportDeclaration", function () { ]; expect(checkInstructions(funcMainInsns, expected)).to.be.true; }); + + it("Re-exportImportVaribaleIndexTest", function() { + CmdOptions.isModules = () => {return true}; + let snippetCompiler = new SnippetCompiler(); + snippetCompiler.compile( + `import { Graphics } from 'module1'; + import { graphicsAssembler as graphics } from 'module2'; + export { earcut } from 'module3'; + const graphicsAssemblerManager = { + getAssembler(sprite) { + return graphics; + }, + }; + Graphics.Assembler = graphicsAssemblerManager; + export { graphics, graphicsAssemblerManager as graphicsAssembler, };`); + CmdOptions.isModules = () => {return false}; + IRNode.pg = new PandaGen("test", creatAstFromSnippet(""), 0, undefined); + let funcMainInsns = snippetCompiler.getGlobalInsns(); + let graphicsAssemblerManager = new VReg(); + let Graphics = new VReg(); + let v = new VReg(); + let name = new VReg(); + let expected = [ + new Createobjectwithbuffer(new Imm(0), "snippet_1"), + new Sta(graphicsAssemblerManager), + new Lda(graphicsAssemblerManager), + new Stmodulevar(new Imm(0)), + new Ldexternalmodulevar(new Imm(0)), + new Sta(Graphics), + new LdaStr("Graphics"), + new Sta(name), + new ThrowUndefinedifhole(Graphics, name), + new Lda(Graphics), + new Sta(v), + new Mov(graphicsAssemblerManager, v), + new Ldlocalmodulevar(new Imm(0)), + new Stobjbyname(new Imm(1), "Assembler", graphicsAssemblerManager), + new Returnundefined() + ]; + expect(checkInstructions(funcMainInsns, expected)).to.be.true; + }); }); \ No newline at end of file -- Gitee