diff --git a/ts2panda/src/compiler.ts b/ts2panda/src/compiler.ts index 19dfc5b49c2a6314930fa64a36a6c89daddbacc6..b43cb46a595b645d916165a1f143e362a60b213e 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); } } } diff --git a/ts2panda/src/compilerDriver.ts b/ts2panda/src/compilerDriver.ts index b71d158a8c665444add555d0c3afe56b45b3d5c5..ad0b8a91f37cddf7bae84335ca9064c5610f8913 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/index.ts b/ts2panda/src/index.ts index 0342f1b209652bcb479226de6035d6e1ab5dfd99..77edf37d7fddee810e32bff0abf7aeb8b50e2dc1 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, diff --git a/ts2panda/src/recorder.ts b/ts2panda/src/recorder.ts index 6ca5732434a3ec7f37e10e472567b329e8ea1349..69b0d7d545d022f4adf9ad6bf14dd7afffbd19ae 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 c63e6435a39f64441262ad569fcba5a972513e4d..9bdff800f31a86bf20c364f37ed1d5236b53abeb 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);