Skip to content

Commit 0b13ca4

Browse files
Merge pull request microsoft#2734 from Microsoft/singletonScanner
Use a single scanner for all parsing tasks.
2 parents b1acce0 + b51230f commit 0b13ca4

File tree

9 files changed

+889
-823
lines changed

9 files changed

+889
-823
lines changed

src/compiler/checker.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12953,6 +12953,11 @@ module ts {
1295312953
}
1295412954
}
1295512955

12956+
function isEvalOrArgumentsIdentifier(node: Node): boolean {
12957+
return node.kind === SyntaxKind.Identifier &&
12958+
((<Identifier>node).text === "eval" || (<Identifier>node).text === "arguments");
12959+
}
12960+
1295612961
function checkGrammarConstructorTypeParameters(node: ConstructorDeclaration) {
1295712962
if (node.typeParameters) {
1295812963
return grammarErrorAtPos(getSourceFileOfNode(node), node.typeParameters.pos, node.typeParameters.end - node.typeParameters.pos, Diagnostics.Type_parameters_cannot_appear_on_a_constructor_declaration);

src/compiler/parser.ts

Lines changed: 743 additions & 748 deletions
Large diffs are not rendered by default.

src/compiler/program.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ module ts {
5454
}
5555
text = "";
5656
}
57+
5758
return text !== undefined ? createSourceFile(fileName, text, languageVersion, setParentNodes) : undefined;
5859
}
5960

src/compiler/scanner.ts

Lines changed: 41 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ module ts {
2525
reScanTemplateToken(): SyntaxKind;
2626
scan(): SyntaxKind;
2727
setText(text: string): void;
28+
setOnError(onError: ErrorCallback): void;
29+
setScriptTarget(scriptTarget: ScriptTarget): void;
2830
setTextPos(textPos: number): void;
2931
// Invokes the provided callback then unconditionally restores the scanner to the state it
3032
// was in immediately prior to invoking the callback. The result of invoking the callback
@@ -599,6 +601,7 @@ module ts {
599601
export function createScanner(languageVersion: ScriptTarget, skipTrivia: boolean, text?: string, onError?: ErrorCallback): Scanner {
600602
let pos: number; // Current position (end position of text of current token)
601603
let len: number; // Length of text
604+
602605
let startPos: number; // Start position of whitespace before current token
603606
let tokenPos: number; // Start position of text of current token
604607
let token: SyntaxKind;
@@ -607,6 +610,32 @@ module ts {
607610
let hasExtendedUnicodeEscape: boolean;
608611
let tokenIsUnterminated: boolean;
609612

613+
setText(text);
614+
615+
return {
616+
getStartPos: () => startPos,
617+
getTextPos: () => pos,
618+
getToken: () => token,
619+
getTokenPos: () => tokenPos,
620+
getTokenText: () => text.substring(tokenPos, pos),
621+
getTokenValue: () => tokenValue,
622+
hasExtendedUnicodeEscape: () => hasExtendedUnicodeEscape,
623+
hasPrecedingLineBreak: () => precedingLineBreak,
624+
isIdentifier: () => token === SyntaxKind.Identifier || token > SyntaxKind.LastReservedWord,
625+
isReservedWord: () => token >= SyntaxKind.FirstReservedWord && token <= SyntaxKind.LastReservedWord,
626+
isUnterminated: () => tokenIsUnterminated,
627+
reScanGreaterToken,
628+
reScanSlashToken,
629+
reScanTemplateToken,
630+
scan,
631+
setText,
632+
setScriptTarget,
633+
setOnError,
634+
setTextPos,
635+
tryScan,
636+
lookAhead,
637+
};
638+
610639
function error(message: DiagnosticMessage, length?: number): void {
611640
if (onError) {
612641
onError(message, length || 0);
@@ -1450,37 +1479,24 @@ module ts {
14501479
setTextPos(0);
14511480
}
14521481

1482+
function setOnError(errorCallback: ErrorCallback) {
1483+
onError = errorCallback;
1484+
}
1485+
1486+
function setScriptTarget(scriptTarget: ScriptTarget) {
1487+
languageVersion = scriptTarget;
1488+
}
1489+
14531490
function setTextPos(textPos: number) {
14541491
pos = textPos;
14551492
startPos = textPos;
14561493
tokenPos = textPos;
14571494
token = SyntaxKind.Unknown;
14581495
precedingLineBreak = false;
1459-
}
1460-
1461-
setText(text);
1462-
14631496

1464-
return {
1465-
getStartPos: () => startPos,
1466-
getTextPos: () => pos,
1467-
getToken: () => token,
1468-
getTokenPos: () => tokenPos,
1469-
getTokenText: () => text.substring(tokenPos, pos),
1470-
getTokenValue: () => tokenValue,
1471-
hasExtendedUnicodeEscape: () => hasExtendedUnicodeEscape,
1472-
hasPrecedingLineBreak: () => precedingLineBreak,
1473-
isIdentifier: () => token === SyntaxKind.Identifier || token > SyntaxKind.LastReservedWord,
1474-
isReservedWord: () => token >= SyntaxKind.FirstReservedWord && token <= SyntaxKind.LastReservedWord,
1475-
isUnterminated: () => tokenIsUnterminated,
1476-
reScanGreaterToken,
1477-
reScanSlashToken,
1478-
reScanTemplateToken,
1479-
scan,
1480-
setText,
1481-
setTextPos,
1482-
tryScan,
1483-
lookAhead,
1484-
};
1497+
tokenValue = undefined;
1498+
hasExtendedUnicodeEscape = false;
1499+
tokenIsUnterminated = false;
1500+
}
14851501
}
14861502
}

src/compiler/utilities.ts

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1612,6 +1612,55 @@ module ts {
16121612
}
16131613
}
16141614

1615+
export function modifierToFlag(token: SyntaxKind): NodeFlags {
1616+
switch (token) {
1617+
case SyntaxKind.StaticKeyword: return NodeFlags.Static;
1618+
case SyntaxKind.PublicKeyword: return NodeFlags.Public;
1619+
case SyntaxKind.ProtectedKeyword: return NodeFlags.Protected;
1620+
case SyntaxKind.PrivateKeyword: return NodeFlags.Private;
1621+
case SyntaxKind.ExportKeyword: return NodeFlags.Export;
1622+
case SyntaxKind.DeclareKeyword: return NodeFlags.Ambient;
1623+
case SyntaxKind.ConstKeyword: return NodeFlags.Const;
1624+
case SyntaxKind.DefaultKeyword: return NodeFlags.Default;
1625+
}
1626+
return 0;
1627+
}
1628+
1629+
export function isLeftHandSideExpression(expr: Expression): boolean {
1630+
if (expr) {
1631+
switch (expr.kind) {
1632+
case SyntaxKind.PropertyAccessExpression:
1633+
case SyntaxKind.ElementAccessExpression:
1634+
case SyntaxKind.NewExpression:
1635+
case SyntaxKind.CallExpression:
1636+
case SyntaxKind.TaggedTemplateExpression:
1637+
case SyntaxKind.ArrayLiteralExpression:
1638+
case SyntaxKind.ParenthesizedExpression:
1639+
case SyntaxKind.ObjectLiteralExpression:
1640+
case SyntaxKind.ClassExpression:
1641+
case SyntaxKind.FunctionExpression:
1642+
case SyntaxKind.Identifier:
1643+
case SyntaxKind.RegularExpressionLiteral:
1644+
case SyntaxKind.NumericLiteral:
1645+
case SyntaxKind.StringLiteral:
1646+
case SyntaxKind.NoSubstitutionTemplateLiteral:
1647+
case SyntaxKind.TemplateExpression:
1648+
case SyntaxKind.FalseKeyword:
1649+
case SyntaxKind.NullKeyword:
1650+
case SyntaxKind.ThisKeyword:
1651+
case SyntaxKind.TrueKeyword:
1652+
case SyntaxKind.SuperKeyword:
1653+
return true;
1654+
}
1655+
}
1656+
1657+
return false;
1658+
}
1659+
1660+
export function isAssignmentOperator(token: SyntaxKind): boolean {
1661+
return token >= SyntaxKind.FirstAssignment && token <= SyntaxKind.LastAssignment;
1662+
}
1663+
16151664
// Returns false if this heritage clause element's expression contains something unsupported
16161665
// (i.e. not a name or dotted name).
16171666
export function isSupportedHeritageClauseElement(node: HeritageClauseElement): boolean {

tests/baselines/reference/APISample_compile.types

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,9 @@ export function compile(fileNames: string[], options: ts.CompilerOptions): void
2828
var program = ts.createProgram(fileNames, options);
2929
>program : ts.Program, Symbol(program, Decl(APISample_compile.ts, 14, 7))
3030
>ts.createProgram(fileNames, options) : ts.Program
31-
>ts.createProgram : (rootNames: string[], options: ts.CompilerOptions, host?: ts.CompilerHost) => ts.Program, Symbol(ts.createProgram, Decl(typescript.d.ts, 1229, 113))
31+
>ts.createProgram : (rootNames: string[], options: ts.CompilerOptions, host?: ts.CompilerHost) => ts.Program, Symbol(ts.createProgram, Decl(typescript.d.ts, 1225, 113))
3232
>ts : typeof ts, Symbol(ts, Decl(APISample_compile.ts, 9, 20))
33-
>createProgram : (rootNames: string[], options: ts.CompilerOptions, host?: ts.CompilerHost) => ts.Program, Symbol(ts.createProgram, Decl(typescript.d.ts, 1229, 113))
33+
>createProgram : (rootNames: string[], options: ts.CompilerOptions, host?: ts.CompilerHost) => ts.Program, Symbol(ts.createProgram, Decl(typescript.d.ts, 1225, 113))
3434
>fileNames : string[], Symbol(fileNames, Decl(APISample_compile.ts, 13, 24))
3535
>options : ts.CompilerOptions, Symbol(options, Decl(APISample_compile.ts, 13, 44))
3636

@@ -46,9 +46,9 @@ export function compile(fileNames: string[], options: ts.CompilerOptions): void
4646
>ts.getPreEmitDiagnostics(program).concat(emitResult.diagnostics) : ts.Diagnostic[]
4747
>ts.getPreEmitDiagnostics(program).concat : { <U extends ts.Diagnostic[]>(...items: U[]): ts.Diagnostic[]; (...items: ts.Diagnostic[]): ts.Diagnostic[]; }, Symbol(Array.concat, Decl(lib.d.ts, 1025, 13), Decl(lib.d.ts, 1030, 46))
4848
>ts.getPreEmitDiagnostics(program) : ts.Diagnostic[]
49-
>ts.getPreEmitDiagnostics : (program: ts.Program) => ts.Diagnostic[], Symbol(ts.getPreEmitDiagnostics, Decl(typescript.d.ts, 1227, 98))
49+
>ts.getPreEmitDiagnostics : (program: ts.Program) => ts.Diagnostic[], Symbol(ts.getPreEmitDiagnostics, Decl(typescript.d.ts, 1223, 98))
5050
>ts : typeof ts, Symbol(ts, Decl(APISample_compile.ts, 9, 20))
51-
>getPreEmitDiagnostics : (program: ts.Program) => ts.Diagnostic[], Symbol(ts.getPreEmitDiagnostics, Decl(typescript.d.ts, 1227, 98))
51+
>getPreEmitDiagnostics : (program: ts.Program) => ts.Diagnostic[], Symbol(ts.getPreEmitDiagnostics, Decl(typescript.d.ts, 1223, 98))
5252
>program : ts.Program, Symbol(program, Decl(APISample_compile.ts, 14, 7))
5353
>concat : { <U extends ts.Diagnostic[]>(...items: U[]): ts.Diagnostic[]; (...items: ts.Diagnostic[]): ts.Diagnostic[]; }, Symbol(Array.concat, Decl(lib.d.ts, 1025, 13), Decl(lib.d.ts, 1030, 46))
5454
>emitResult.diagnostics : ts.Diagnostic[], Symbol(ts.EmitResult.diagnostics, Decl(typescript.d.ts, 820, 29))
@@ -67,21 +67,21 @@ export function compile(fileNames: string[], options: ts.CompilerOptions): void
6767
>line : number, Symbol(line, Decl(APISample_compile.ts, 20, 13))
6868
>character : number, Symbol(character, Decl(APISample_compile.ts, 20, 19))
6969
>diagnostic.file.getLineAndCharacterOfPosition(diagnostic.start) : ts.LineAndCharacter
70-
>diagnostic.file.getLineAndCharacterOfPosition : (pos: number) => ts.LineAndCharacter, Symbol(ts.SourceFile.getLineAndCharacterOfPosition, Decl(typescript.d.ts, 1290, 26))
70+
>diagnostic.file.getLineAndCharacterOfPosition : (pos: number) => ts.LineAndCharacter, Symbol(ts.SourceFile.getLineAndCharacterOfPosition, Decl(typescript.d.ts, 1286, 26))
7171
>diagnostic.file : ts.SourceFile, Symbol(ts.Diagnostic.file, Decl(typescript.d.ts, 1062, 26))
7272
>diagnostic : ts.Diagnostic, Symbol(diagnostic, Decl(APISample_compile.ts, 19, 27))
7373
>file : ts.SourceFile, Symbol(ts.Diagnostic.file, Decl(typescript.d.ts, 1062, 26))
74-
>getLineAndCharacterOfPosition : (pos: number) => ts.LineAndCharacter, Symbol(ts.SourceFile.getLineAndCharacterOfPosition, Decl(typescript.d.ts, 1290, 26))
74+
>getLineAndCharacterOfPosition : (pos: number) => ts.LineAndCharacter, Symbol(ts.SourceFile.getLineAndCharacterOfPosition, Decl(typescript.d.ts, 1286, 26))
7575
>diagnostic.start : number, Symbol(ts.Diagnostic.start, Decl(typescript.d.ts, 1063, 25))
7676
>diagnostic : ts.Diagnostic, Symbol(diagnostic, Decl(APISample_compile.ts, 19, 27))
7777
>start : number, Symbol(ts.Diagnostic.start, Decl(typescript.d.ts, 1063, 25))
7878

7979
var message = ts.flattenDiagnosticMessageText(diagnostic.messageText, '\n');
8080
>message : string, Symbol(message, Decl(APISample_compile.ts, 21, 11))
8181
>ts.flattenDiagnosticMessageText(diagnostic.messageText, '\n') : string
82-
>ts.flattenDiagnosticMessageText : (messageText: string | ts.DiagnosticMessageChain, newLine: string) => string, Symbol(ts.flattenDiagnosticMessageText, Decl(typescript.d.ts, 1228, 67))
82+
>ts.flattenDiagnosticMessageText : (messageText: string | ts.DiagnosticMessageChain, newLine: string) => string, Symbol(ts.flattenDiagnosticMessageText, Decl(typescript.d.ts, 1224, 67))
8383
>ts : typeof ts, Symbol(ts, Decl(APISample_compile.ts, 9, 20))
84-
>flattenDiagnosticMessageText : (messageText: string | ts.DiagnosticMessageChain, newLine: string) => string, Symbol(ts.flattenDiagnosticMessageText, Decl(typescript.d.ts, 1228, 67))
84+
>flattenDiagnosticMessageText : (messageText: string | ts.DiagnosticMessageChain, newLine: string) => string, Symbol(ts.flattenDiagnosticMessageText, Decl(typescript.d.ts, 1224, 67))
8585
>diagnostic.messageText : string | ts.DiagnosticMessageChain, Symbol(ts.Diagnostic.messageText, Decl(typescript.d.ts, 1065, 23))
8686
>diagnostic : ts.Diagnostic, Symbol(diagnostic, Decl(APISample_compile.ts, 19, 27))
8787
>messageText : string | ts.DiagnosticMessageChain, Symbol(ts.Diagnostic.messageText, Decl(typescript.d.ts, 1065, 23))

tests/baselines/reference/APISample_linter.types

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ export function delint(sourceFile: ts.SourceFile) {
2222
>delint : (sourceFile: ts.SourceFile) => void, Symbol(delint, Decl(APISample_linter.ts, 11, 33))
2323
>sourceFile : ts.SourceFile, Symbol(sourceFile, Decl(APISample_linter.ts, 13, 23))
2424
>ts : any, Symbol(ts, Decl(APISample_linter.ts, 11, 6))
25-
>SourceFile : ts.SourceFile, Symbol(ts.SourceFile, Decl(typescript.d.ts, 740, 5), Decl(typescript.d.ts, 1289, 5))
25+
>SourceFile : ts.SourceFile, Symbol(ts.SourceFile, Decl(typescript.d.ts, 740, 5), Decl(typescript.d.ts, 1285, 5))
2626

2727
delintNode(sourceFile);
2828
>delintNode(sourceFile) : void
@@ -33,7 +33,7 @@ export function delint(sourceFile: ts.SourceFile) {
3333
>delintNode : (node: ts.Node) => void, Symbol(delintNode, Decl(APISample_linter.ts, 14, 27))
3434
>node : ts.Node, Symbol(node, Decl(APISample_linter.ts, 16, 24))
3535
>ts : any, Symbol(ts, Decl(APISample_linter.ts, 11, 6))
36-
>Node : ts.Node, Symbol(ts.Node, Decl(typescript.d.ts, 296, 5), Decl(typescript.d.ts, 1249, 32))
36+
>Node : ts.Node, Symbol(ts.Node, Decl(typescript.d.ts, 296, 5), Decl(typescript.d.ts, 1245, 32))
3737

3838
switch (node.kind) {
3939
>node.kind : ts.SyntaxKind, Symbol(ts.Node.kind, Decl(typescript.d.ts, 297, 38))
@@ -230,20 +230,20 @@ export function delint(sourceFile: ts.SourceFile) {
230230
>report : (node: ts.Node, message: string) => void, Symbol(report, Decl(APISample_linter.ts, 48, 5))
231231
>node : ts.Node, Symbol(node, Decl(APISample_linter.ts, 50, 20))
232232
>ts : any, Symbol(ts, Decl(APISample_linter.ts, 11, 6))
233-
>Node : ts.Node, Symbol(ts.Node, Decl(typescript.d.ts, 296, 5), Decl(typescript.d.ts, 1249, 32))
233+
>Node : ts.Node, Symbol(ts.Node, Decl(typescript.d.ts, 296, 5), Decl(typescript.d.ts, 1245, 32))
234234
>message : string, Symbol(message, Decl(APISample_linter.ts, 50, 34))
235235

236236
let { line, character } = sourceFile.getLineAndCharacterOfPosition(node.getStart());
237237
>line : number, Symbol(line, Decl(APISample_linter.ts, 51, 13))
238238
>character : number, Symbol(character, Decl(APISample_linter.ts, 51, 19))
239239
>sourceFile.getLineAndCharacterOfPosition(node.getStart()) : ts.LineAndCharacter
240-
>sourceFile.getLineAndCharacterOfPosition : (pos: number) => ts.LineAndCharacter, Symbol(ts.SourceFile.getLineAndCharacterOfPosition, Decl(typescript.d.ts, 1290, 26))
240+
>sourceFile.getLineAndCharacterOfPosition : (pos: number) => ts.LineAndCharacter, Symbol(ts.SourceFile.getLineAndCharacterOfPosition, Decl(typescript.d.ts, 1286, 26))
241241
>sourceFile : ts.SourceFile, Symbol(sourceFile, Decl(APISample_linter.ts, 13, 23))
242-
>getLineAndCharacterOfPosition : (pos: number) => ts.LineAndCharacter, Symbol(ts.SourceFile.getLineAndCharacterOfPosition, Decl(typescript.d.ts, 1290, 26))
242+
>getLineAndCharacterOfPosition : (pos: number) => ts.LineAndCharacter, Symbol(ts.SourceFile.getLineAndCharacterOfPosition, Decl(typescript.d.ts, 1286, 26))
243243
>node.getStart() : number
244-
>node.getStart : (sourceFile?: ts.SourceFile) => number, Symbol(ts.Node.getStart, Decl(typescript.d.ts, 1254, 53))
244+
>node.getStart : (sourceFile?: ts.SourceFile) => number, Symbol(ts.Node.getStart, Decl(typescript.d.ts, 1250, 53))
245245
>node : ts.Node, Symbol(node, Decl(APISample_linter.ts, 50, 20))
246-
>getStart : (sourceFile?: ts.SourceFile) => number, Symbol(ts.Node.getStart, Decl(typescript.d.ts, 1254, 53))
246+
>getStart : (sourceFile?: ts.SourceFile) => number, Symbol(ts.Node.getStart, Decl(typescript.d.ts, 1250, 53))
247247

248248
console.log(`${sourceFile.fileName} (${line + 1},${character + 1}): ${message}`);
249249
>console.log(`${sourceFile.fileName} (${line + 1},${character + 1}): ${message}`) : any
@@ -286,9 +286,9 @@ fileNames.forEach(fileName => {
286286
let sourceFile = ts.createSourceFile(fileName, readFileSync(fileName).toString(), ts.ScriptTarget.ES6, /*setParentNodes */ true);
287287
>sourceFile : ts.SourceFile, Symbol(sourceFile, Decl(APISample_linter.ts, 59, 7))
288288
>ts.createSourceFile(fileName, readFileSync(fileName).toString(), ts.ScriptTarget.ES6, /*setParentNodes */ true) : ts.SourceFile
289-
>ts.createSourceFile : (fileName: string, sourceText: string, languageVersion: ts.ScriptTarget, setParentNodes?: boolean) => ts.SourceFile, Symbol(ts.createSourceFile, Decl(typescript.d.ts, 1218, 62))
289+
>ts.createSourceFile : (fileName: string, sourceText: string, languageVersion: ts.ScriptTarget, setParentNodes?: boolean) => ts.SourceFile, Symbol(ts.createSourceFile, Decl(typescript.d.ts, 1215, 107))
290290
>ts : typeof ts, Symbol(ts, Decl(APISample_linter.ts, 11, 6))
291-
>createSourceFile : (fileName: string, sourceText: string, languageVersion: ts.ScriptTarget, setParentNodes?: boolean) => ts.SourceFile, Symbol(ts.createSourceFile, Decl(typescript.d.ts, 1218, 62))
291+
>createSourceFile : (fileName: string, sourceText: string, languageVersion: ts.ScriptTarget, setParentNodes?: boolean) => ts.SourceFile, Symbol(ts.createSourceFile, Decl(typescript.d.ts, 1215, 107))
292292
>fileName : any, Symbol(fileName, Decl(APISample_linter.ts, 57, 18))
293293
>readFileSync(fileName).toString() : any
294294
>readFileSync(fileName).toString : any

tests/baselines/reference/APISample_transform.types

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@ const source = "let x: string = 'string'";
1919
let result = ts.transpile(source, { module: ts.ModuleKind.CommonJS });
2020
>result : string, Symbol(result, Decl(APISample_transform.ts, 13, 3))
2121
>ts.transpile(source, { module: ts.ModuleKind.CommonJS }) : string
22-
>ts.transpile : (input: string, compilerOptions?: ts.CompilerOptions, fileName?: string, diagnostics?: ts.Diagnostic[]) => string, Symbol(ts.transpile, Decl(typescript.d.ts, 1756, 5))
22+
>ts.transpile : (input: string, compilerOptions?: ts.CompilerOptions, fileName?: string, diagnostics?: ts.Diagnostic[]) => string, Symbol(ts.transpile, Decl(typescript.d.ts, 1752, 5))
2323
>ts : typeof ts, Symbol(ts, Decl(APISample_transform.ts, 9, 6))
24-
>transpile : (input: string, compilerOptions?: ts.CompilerOptions, fileName?: string, diagnostics?: ts.Diagnostic[]) => string, Symbol(ts.transpile, Decl(typescript.d.ts, 1756, 5))
24+
>transpile : (input: string, compilerOptions?: ts.CompilerOptions, fileName?: string, diagnostics?: ts.Diagnostic[]) => string, Symbol(ts.transpile, Decl(typescript.d.ts, 1752, 5))
2525
>source : string, Symbol(source, Decl(APISample_transform.ts, 11, 5))
2626
>{ module: ts.ModuleKind.CommonJS } : { [x: string]: ts.ModuleKind; module: ts.ModuleKind; }
2727
>module : ts.ModuleKind, Symbol(module, Decl(APISample_transform.ts, 13, 35))

0 commit comments

Comments
 (0)