From ae9f6a5aac5a48077a4018b1ec4100895da6df23 Mon Sep 17 00:00:00 2001 From: zhangrengao Date: Thu, 10 Mar 2022 10:05:29 +0800 Subject: [PATCH 1/3] modify es2015 to es2017 Signed-off-by: zhangrengao Change-Id: I951538c829b23b6f76ac9abd1ff5a4f1fccb6184 --- ts2panda/src/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ts2panda/src/index.ts b/ts2panda/src/index.ts index 0342f1b209..77edf37d7f 100644 --- a/ts2panda/src/index.ts +++ b/ts2panda/src/index.ts @@ -161,7 +161,7 @@ namespace Compiler { allowJs: true, noEmitOnError: true, noImplicitAny: true, - target: ts.ScriptTarget.ES2015, + target: ts.ScriptTarget.ES2017, module: ts.ModuleKind.ES2015, strictNullChecks: true, skipLibCheck: true, -- Gitee From f0b7c4f06081aa446c7f412ce6e897470de092df Mon Sep 17 00:00:00 2001 From: zhangrengao Date: Thu, 17 Mar 2022 12:47:20 +0800 Subject: [PATCH 2/3] add checkSyntaxStatus of check syntax Signed-off-by: zhangrengao Change-Id: I2360bc14f57bbbc9e1484f385cf94283bea32eeb --- ts2panda/src/compilerDriver.ts | 10 +++++----- ts2panda/src/recorder.ts | 6 ++++-- ts2panda/tests/lexenv.test.ts | 10 +++++----- 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/ts2panda/src/compilerDriver.ts b/ts2panda/src/compilerDriver.ts index b71d158a8c..ad0b8a91f3 100644 --- a/ts2panda/src/compilerDriver.ts +++ b/ts2panda/src/compilerDriver.ts @@ -148,7 +148,7 @@ export class CompilerDriver { } compileForSyntaxCheck(node: ts.SourceFile): void { - let recorder = this.compilePrologue(node, false); + let recorder = this.compilePrologue(node, false, true); checkDuplicateDeclaration(recorder); } @@ -165,7 +165,7 @@ export class CompilerDriver { }); } - let recorder = this.compilePrologue(node, true); + let recorder = this.compilePrologue(node, true, false); // initiate ts2abc if (!CmdOptions.isAssemblyMode()) { @@ -245,7 +245,7 @@ export class CompilerDriver { compileUnitTest(node: ts.SourceFile, literalBufferArray?: Array): void { CompilerDriver.isTsFile = CompilerDriver.isTypeScriptSourceFile(node); - let recorder = this.compilePrologue(node, true); + let recorder = this.compilePrologue(node, true, true); for (let i = 0; i < this.pendingCompilationUnits.length; i++) { let unit: PendingCompilationUnit = this.pendingCompilationUnits[i]; @@ -281,7 +281,7 @@ export class CompilerDriver { } } - private compilePrologue(node: ts.SourceFile, recordType: boolean) { + private compilePrologue(node: ts.SourceFile, recordType: boolean, syntaxCheckStatus: boolean) { let topLevelScope: GlobalScope | ModuleScope; if (CmdOptions.isModules()) { topLevelScope = new ModuleScope(node); @@ -293,7 +293,7 @@ export class CompilerDriver { if (enableTypeRecord) { TypeRecorder.createInstance(); } - let recorder = new Recorder(node, topLevelScope, this, enableTypeRecord, CompilerDriver.isTsFile); + let recorder = new Recorder(node, topLevelScope, this, enableTypeRecord, CompilerDriver.isTsFile, syntaxCheckStatus); recorder.record(); if (topLevelScope instanceof ModuleScope) { topLevelScope.module().setModuleEnvironment(topLevelScope); diff --git a/ts2panda/src/recorder.ts b/ts2panda/src/recorder.ts index 6ca5732434..69b0d7d545 100644 --- a/ts2panda/src/recorder.ts +++ b/ts2panda/src/recorder.ts @@ -72,8 +72,9 @@ export class Recorder { // [delete it when type system adapts for ESM] private importStmts: Array = []; private exportStmts: Array = []; + private syntaxCheckStatus: boolean; - constructor(node: ts.Node, scope: Scope, compilerDriver: CompilerDriver, recordType: boolean, isTsFile: boolean) { + constructor(node: ts.Node, scope: Scope, compilerDriver: CompilerDriver, recordType: boolean, isTsFile: boolean, syntaxCheckStatus: boolean) { this.node = node; this.scope = scope; this.compilerDriver = compilerDriver; @@ -81,6 +82,7 @@ export class Recorder { this.funcNameMap = new Map(); this.funcNameMap.set("main", 1); this.isTsFile = isTsFile; + this.syntaxCheckStatus = syntaxCheckStatus; } record() { @@ -121,7 +123,7 @@ export class Recorder { private recordInfo(node: ts.Node, scope: Scope) { node.forEachChild(childNode => { - if (!this.recordType) { + if (this.syntaxCheckStatus) { checkSyntaxError(childNode, scope); } switch (childNode.kind) { diff --git a/ts2panda/tests/lexenv.test.ts b/ts2panda/tests/lexenv.test.ts index c63e6435a3..9bdff800f3 100644 --- a/ts2panda/tests/lexenv.test.ts +++ b/ts2panda/tests/lexenv.test.ts @@ -118,7 +118,7 @@ describe("lexenv-compile-testcase in lexenv.test.ts", function () { let sourceFile = creatAstFromSnippet(source); let compilerDriver = new CompilerDriver('UnitTest'); let globalScope = new GlobalScope(sourceFile); - let recorder = new Recorder(sourceFile, globalScope, compilerDriver, false, false); + let recorder = new Recorder(sourceFile, globalScope, compilerDriver, false, false, true); recorder.record(); expect(globalScope, "root is null!").to.not.equal(null); @@ -146,7 +146,7 @@ describe("lexenv-compile-testcase in lexenv.test.ts", function () { let sourceFile = creatAstFromSnippet(source); let compilerDriver = new CompilerDriver('UnitTest'); let globalScope = new GlobalScope(sourceFile); - let recorder = new Recorder(sourceFile, globalScope, compilerDriver, false, false); + let recorder = new Recorder(sourceFile, globalScope, compilerDriver, false, false, true); recorder.record(); let children = globalScope.getChildVariableScope(); @@ -194,7 +194,7 @@ describe("lexenv-compile-testcase in lexenv.test.ts", function () { let compilerDriver = new CompilerDriver('UnitTest'); let globalScope = new GlobalScope(sourceFile); - let recorder = new Recorder(sourceFile, globalScope, compilerDriver, false, false); + let recorder = new Recorder(sourceFile, globalScope, compilerDriver, false, false, true); recorder.record(); let postOrderVariableScopes = compilerDriver.postOrderAnalysis(globalScope); @@ -218,7 +218,7 @@ describe("lexenv-compile-testcase in lexenv.test.ts", function () { let compilerDriver = new CompilerDriver('UnitTest'); let globalScope = new GlobalScope(sourceFile); - let recorder = new Recorder(sourceFile, globalScope, compilerDriver, false, false); + let recorder = new Recorder(sourceFile, globalScope, compilerDriver, false, false, true); recorder.record(); let postOrderVariableScopes = compilerDriver.postOrderAnalysis(globalScope); @@ -272,7 +272,7 @@ describe("lexenv-compile-testcase in lexenv.test.ts", function () { let compilerDriver = new CompilerDriver('UnitTest'); let globalScope = new GlobalScope(sourceFile); - let recorder = new Recorder(sourceFile, globalScope, compilerDriver, false, false); + let recorder = new Recorder(sourceFile, globalScope, compilerDriver, false, false, true); recorder.record(); let postOrderVariableScopes = compilerDriver.postOrderAnalysis(globalScope); -- Gitee From 872db2060088d932e178d09a6b190beab2a54b7c Mon Sep 17 00:00:00 2001 From: zhangrengao Date: Thu, 17 Mar 2022 21:40:31 +0800 Subject: [PATCH 3/3] async function return of invalid node Signed-off-by: zhangrengao Change-Id: Iea7cffb9278def1c3cbbaa0922f9b44b3bf69601 --- ts2panda/src/compiler.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ts2panda/src/compiler.ts b/ts2panda/src/compiler.ts index 19dfc5b49c..b43cb46a59 100644 --- a/ts2panda/src/compiler.ts +++ b/ts2panda/src/compiler.ts @@ -304,9 +304,9 @@ export class Compiler { if (!unreachableFlag) { // exit GlobalScopefunction or Function Block return if (this.funcBuilder instanceof AsyncFunctionBuilder) { this.funcBuilder.resolve(NodeKind.Invalid, getVregisterCache(pandaGen, CacheList.undefined)); - pandaGen.return(DebugInfo.getLastNode()); + pandaGen.return(NodeKind.Invalid); } else { - pandaGen.returnUndefined(DebugInfo.getLastNode()); + pandaGen.returnUndefined(NodeKind.Invalid); } } } -- Gitee