mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-02-19 08:24:15 -06:00
Minor update to source map emit and fix for positions
This commit is contained in:
parent
9b7270f124
commit
1c760efdfd
@ -3904,7 +3904,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
||||
write(" = ");
|
||||
emit(value);
|
||||
});
|
||||
emitEnd(nodeForSourceMap, /*stopOverridingSpan*/true);
|
||||
emitEnd(nodeForSourceMap);
|
||||
sourceMap.stopOverridingSpan();
|
||||
|
||||
if (exportChanged) {
|
||||
write(")");
|
||||
|
||||
@ -102,6 +102,16 @@ namespace ts {
|
||||
return clone;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a clone of a node with a unique node ID.
|
||||
*/
|
||||
export function getUniqueClone<T extends Node>(node: T): T {
|
||||
const clone = getSynthesizedClone(node);
|
||||
clone.id = undefined;
|
||||
getNodeId(clone);
|
||||
return clone;
|
||||
}
|
||||
|
||||
// Literals
|
||||
|
||||
export function createLiteral(value: string, location?: TextRange): StringLiteral;
|
||||
|
||||
@ -298,13 +298,21 @@ const _super = (function (geti, seti) {
|
||||
const leadingComments = getLeadingComments(node, getNotEmittedParent);
|
||||
const trailingComments = getTrailingComments(node, getNotEmittedParent);
|
||||
emitLeadingComments(node, leadingComments);
|
||||
emitStart(node);
|
||||
emitStart(node, shouldEmitSourceMap, shouldEmitNestedSourceMap);
|
||||
emitWorker(node);
|
||||
emitEnd(node);
|
||||
emitEnd(node, shouldEmitSourceMap, shouldEmitNestedSourceMap);
|
||||
emitTrailingComments(node, trailingComments);
|
||||
}
|
||||
}
|
||||
|
||||
function shouldEmitSourceMap(node: Node) {
|
||||
return (getNodeEmitFlags(node) & NodeEmitFlags.NoSourceMap) === 0;
|
||||
}
|
||||
|
||||
function shouldEmitNestedSourceMap(node: Node) {
|
||||
return (getNodeEmitFlags(node) & NodeEmitFlags.NoNestedSourceMaps) === 0;
|
||||
}
|
||||
|
||||
function emitWorker(node: Node): void {
|
||||
const kind = node.kind;
|
||||
switch (kind) {
|
||||
@ -1151,10 +1159,8 @@ const _super = (function (geti, seti) {
|
||||
}
|
||||
|
||||
function emitExpressionWithTypeArguments(node: ExpressionWithTypeArguments) {
|
||||
emitStart(node);
|
||||
emitExpression(node.expression);
|
||||
emitTypeArguments(node, node.typeArguments);
|
||||
emitEnd(node);
|
||||
}
|
||||
|
||||
function emitAsExpression(node: AsExpression) {
|
||||
@ -1601,21 +1607,17 @@ const _super = (function (geti, seti) {
|
||||
}
|
||||
|
||||
function emitImportClause(node: ImportClause) {
|
||||
emitStart(node);
|
||||
emit(node.name);
|
||||
if (node.name && node.namedBindings) {
|
||||
write(", ");
|
||||
}
|
||||
emit(node.namedBindings);
|
||||
emitEnd(node);
|
||||
write(" from ");
|
||||
}
|
||||
|
||||
function emitNamespaceImport(node: NamespaceImport) {
|
||||
emitStart(node);
|
||||
write("* as ");
|
||||
emit(node.name);
|
||||
emitEnd(node);
|
||||
}
|
||||
|
||||
function emitNamedImports(node: NamedImports) {
|
||||
@ -1759,12 +1761,10 @@ const _super = (function (geti, seti) {
|
||||
}
|
||||
|
||||
function emitHeritageClause(node: HeritageClause) {
|
||||
emitStart(node);
|
||||
write(" ");
|
||||
writeToken(node.token);
|
||||
write(" ");
|
||||
emitList(node, node.types, ListFormat.HeritageClauseTypes);
|
||||
emitEnd(node);
|
||||
}
|
||||
|
||||
function emitCatchClause(node: CatchClause) {
|
||||
@ -2207,9 +2207,9 @@ const _super = (function (geti, seti) {
|
||||
|
||||
function writeTokenNode(node: Node) {
|
||||
if (node) {
|
||||
emitStart(node);
|
||||
emitStart(node, shouldEmitSourceMap, shouldEmitNestedSourceMap);
|
||||
writeTokenText(node.kind);
|
||||
emitEnd(node);
|
||||
emitEnd(node, shouldEmitSourceMap, shouldEmitNestedSourceMap);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -6,10 +6,10 @@ namespace ts {
|
||||
getSourceMapData(): SourceMapData;
|
||||
setSourceFile(sourceFile: SourceFile): void;
|
||||
emitPos(pos: number): void;
|
||||
emitStart(range: TextRange): void;
|
||||
emitEnd(range: TextRange): void;
|
||||
/*@deprecated*/ emitEnd(range: TextRange, stopOverridingSpan: boolean): void;
|
||||
emitStart(range: TextRange, shouldEmit?: (range: TextRange) => boolean, shouldEmitNested?: (range: TextRange) => boolean): void;
|
||||
emitEnd(range: TextRange, shouldEmit?: (range: TextRange) => boolean, shouldEmitNested?: (range: TextRange) => boolean): void;
|
||||
/*@deprecated*/ changeEmitSourcePos(): void;
|
||||
/*@deprecated*/ stopOverridingSpan(): void;
|
||||
getText(): string;
|
||||
getSourceMappingURL(): string;
|
||||
initialize(filePath: string, sourceMapFilePath: string, sourceFiles: SourceFile[], isBundledEmit: boolean): void;
|
||||
@ -34,9 +34,10 @@ namespace ts {
|
||||
getSourceMapData(): SourceMapData { return undefined; },
|
||||
setSourceFile(sourceFile: SourceFile): void { },
|
||||
emitStart(range: TextRange): void { },
|
||||
emitEnd(range: TextRange, stopOverridingSpan?: boolean): void { },
|
||||
emitEnd(range: TextRange, shouldEmit?: Function, shouldEmitNested?: Function): void { },
|
||||
emitPos(pos: number): void { },
|
||||
changeEmitSourcePos(): void { },
|
||||
stopOverridingSpan(): void { },
|
||||
getText(): string { return undefined; },
|
||||
getSourceMappingURL(): string { return undefined; },
|
||||
initialize(filePath: string, sourceMapFilePath: string, sourceFiles: SourceFile[], isBundledEmit: boolean): void { },
|
||||
@ -81,6 +82,7 @@ namespace ts {
|
||||
emitStart,
|
||||
emitEnd,
|
||||
changeEmitSourcePos,
|
||||
stopOverridingSpan: () => stopOverridingSpan = true,
|
||||
getText,
|
||||
getSourceMappingURL,
|
||||
initialize,
|
||||
@ -318,21 +320,26 @@ namespace ts {
|
||||
return range.pos !== -1 ? skipTrivia(currentSourceFile.text, rangeHasDecorators ? (range as Node).decorators.end : range.pos) : -1;
|
||||
}
|
||||
|
||||
function emitStart(range: TextRange) {
|
||||
emitPos(getStartPos(range));
|
||||
function emitStart(range: TextRange, shouldEmit?: (range: TextRange) => boolean, shouldEmitNested?: (range: TextRange) => boolean) {
|
||||
if (!shouldEmit || shouldEmit(range)) {
|
||||
emitPos(getStartPos(range));
|
||||
}
|
||||
|
||||
if (range.disableSourceMap) {
|
||||
if (shouldEmitNested && !shouldEmitNested(range)) {
|
||||
disable();
|
||||
}
|
||||
}
|
||||
|
||||
function emitEnd(range: TextRange, stopOverridingEnd?: boolean) {
|
||||
if (range.disableSourceMap) {
|
||||
function emitEnd(range: TextRange, shouldEmit?: (range: TextRange) => boolean, shouldEmitNested?: (range: TextRange) => boolean) {
|
||||
if (shouldEmitNested && !shouldEmitNested(range)) {
|
||||
enable();
|
||||
}
|
||||
|
||||
emitPos(range.end);
|
||||
stopOverridingSpan = stopOverridingEnd;
|
||||
if (!shouldEmit || shouldEmit(range)) {
|
||||
emitPos(range.end);
|
||||
}
|
||||
|
||||
stopOverridingSpan = false;
|
||||
}
|
||||
|
||||
function changeEmitSourcePos() {
|
||||
|
||||
@ -13,6 +13,7 @@ namespace ts {
|
||||
* @param visitor An optional visitor to use to visit expressions.
|
||||
*/
|
||||
export function flattenDestructuringAssignment(
|
||||
context: TransformationContext,
|
||||
node: BinaryExpression,
|
||||
needsValue: boolean,
|
||||
recordTempVariable: (node: Identifier) => void,
|
||||
@ -44,7 +45,7 @@ namespace ts {
|
||||
location = node.right;
|
||||
}
|
||||
|
||||
flattenDestructuring(node, value, location, emitAssignment, emitTempVariableAssignment, visitor);
|
||||
flattenDestructuring(context, node, value, location, emitAssignment, emitTempVariableAssignment, visitor);
|
||||
|
||||
if (needsValue) {
|
||||
expressions.push(value);
|
||||
@ -57,7 +58,7 @@ namespace ts {
|
||||
function emitAssignment(name: Identifier, value: Expression, location: TextRange) {
|
||||
const expression = createAssignment(name, value, location);
|
||||
if (isSimpleExpression(value)) {
|
||||
expression.disableSourceMap = true;
|
||||
context.setNodeEmitFlags(expression, NodeEmitFlags.NoNestedSourceMaps);
|
||||
}
|
||||
|
||||
aggregateTransformFlags(expression);
|
||||
@ -79,17 +80,21 @@ namespace ts {
|
||||
* @param value The rhs value for the binding pattern.
|
||||
* @param visitor An optional visitor to use to visit expressions.
|
||||
*/
|
||||
export function flattenParameterDestructuring(node: ParameterDeclaration, value: Expression, visitor?: (node: Node) => VisitResult<Node>) {
|
||||
export function flattenParameterDestructuring(
|
||||
context: TransformationContext,
|
||||
node: ParameterDeclaration,
|
||||
value: Expression,
|
||||
visitor?: (node: Node) => VisitResult<Node>) {
|
||||
const declarations: VariableDeclaration[] = [];
|
||||
|
||||
flattenDestructuring(node, value, node, emitAssignment, emitTempVariableAssignment, visitor);
|
||||
flattenDestructuring(context, node, value, node, emitAssignment, emitTempVariableAssignment, visitor);
|
||||
|
||||
return declarations;
|
||||
|
||||
function emitAssignment(name: Identifier, value: Expression, location: TextRange) {
|
||||
const declaration = createVariableDeclaration(name, value, location);
|
||||
if (isSimpleExpression(value)) {
|
||||
declaration.disableSourceMap = true;
|
||||
context.setNodeEmitFlags(declaration, NodeEmitFlags.NoNestedSourceMaps);
|
||||
}
|
||||
|
||||
aggregateTransformFlags(declaration);
|
||||
@ -110,10 +115,14 @@ namespace ts {
|
||||
* @param value An optional rhs value for the binding pattern.
|
||||
* @param visitor An optional visitor to use to visit expressions.
|
||||
*/
|
||||
export function flattenVariableDestructuring(node: VariableDeclaration, value?: Expression, visitor?: (node: Node) => VisitResult<Node>) {
|
||||
export function flattenVariableDestructuring(
|
||||
context: TransformationContext,
|
||||
node: VariableDeclaration,
|
||||
value?: Expression,
|
||||
visitor?: (node: Node) => VisitResult<Node>) {
|
||||
const declarations: VariableDeclaration[] = [];
|
||||
|
||||
flattenDestructuring(node, value, node, emitAssignment, emitTempVariableAssignment, visitor);
|
||||
flattenDestructuring(context, node, value, node, emitAssignment, emitTempVariableAssignment, visitor);
|
||||
|
||||
return declarations;
|
||||
|
||||
@ -124,7 +133,7 @@ namespace ts {
|
||||
}
|
||||
|
||||
if (isSimpleExpression(value)) {
|
||||
declaration.disableSourceMap = true;
|
||||
context.setNodeEmitFlags(declaration, NodeEmitFlags.NoNestedSourceMaps);
|
||||
}
|
||||
|
||||
declaration.original = original;
|
||||
@ -148,6 +157,7 @@ namespace ts {
|
||||
* @param visitor An optional visitor to use to visit expressions.
|
||||
*/
|
||||
export function flattenVariableDestructuringToExpression(
|
||||
context: TransformationContext,
|
||||
node: VariableDeclaration,
|
||||
recordTempVariable: (name: Identifier) => void,
|
||||
nameSubstitution?: (name: Identifier) => Expression,
|
||||
@ -155,7 +165,7 @@ namespace ts {
|
||||
|
||||
const pendingAssignments: Expression[] = [];
|
||||
|
||||
flattenDestructuring(node, /*value*/ undefined, node, emitAssignment, emitTempVariableAssignment);
|
||||
flattenDestructuring(context, node, /*value*/ undefined, node, emitAssignment, emitTempVariableAssignment);
|
||||
|
||||
const expression = inlineExpressions(pendingAssignments);
|
||||
aggregateTransformFlags(expression);
|
||||
@ -176,7 +186,7 @@ namespace ts {
|
||||
function emitPendingAssignment(name: Expression, value: Expression, location: TextRange, original: Node) {
|
||||
const expression = createAssignment(name, value, location);
|
||||
if (isSimpleExpression(value)) {
|
||||
expression.disableSourceMap = true;
|
||||
context.setNodeEmitFlags(expression, NodeEmitFlags.NoNestedSourceMaps);
|
||||
}
|
||||
|
||||
expression.original = original;
|
||||
@ -186,6 +196,7 @@ namespace ts {
|
||||
}
|
||||
|
||||
function flattenDestructuring(
|
||||
context: TransformationContext,
|
||||
root: BindingElement | BinaryExpression,
|
||||
value: Expression,
|
||||
location: TextRange,
|
||||
|
||||
@ -522,7 +522,7 @@ namespace ts {
|
||||
createVariableStatement(
|
||||
/*modifiers*/ undefined,
|
||||
createVariableDeclarationList(
|
||||
flattenParameterDestructuring(parameter, temp, visitor)
|
||||
flattenParameterDestructuring(context, parameter, temp, visitor)
|
||||
)
|
||||
)
|
||||
);
|
||||
@ -964,7 +964,7 @@ namespace ts {
|
||||
function visitBinaryExpression(node: BinaryExpression, needsDestructuringValue: boolean): Expression {
|
||||
// If we are here it is because this is a destructuring assignment.
|
||||
Debug.assert(isDestructuringAssignment(node));
|
||||
return flattenDestructuringAssignment(node, needsDestructuringValue, hoistVariableDeclaration, visitor);
|
||||
return flattenDestructuringAssignment(context, node, needsDestructuringValue, hoistVariableDeclaration, visitor);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1090,7 +1090,7 @@ namespace ts {
|
||||
// If we are here it is because the name contains a binding pattern.
|
||||
Debug.assert(isBindingPattern(node.name));
|
||||
|
||||
return flattenVariableDestructuring(node, /*value*/ undefined, visitor);
|
||||
return flattenVariableDestructuring(context, node, /*value*/ undefined, visitor);
|
||||
}
|
||||
|
||||
function visitLabeledStatement(node: LabeledStatement) {
|
||||
@ -1173,6 +1173,7 @@ namespace ts {
|
||||
/*modifiers*/ undefined,
|
||||
createVariableDeclarationList(
|
||||
flattenVariableDestructuring(
|
||||
context,
|
||||
firstDeclaration,
|
||||
createElementAccess(rhsReference, counter),
|
||||
visitor
|
||||
@ -1208,6 +1209,7 @@ namespace ts {
|
||||
statements.push(
|
||||
createStatement(
|
||||
flattenDestructuringAssignment(
|
||||
context,
|
||||
assignment,
|
||||
/*needsValue*/ false,
|
||||
hoistVariableDeclaration,
|
||||
|
||||
@ -330,7 +330,7 @@ namespace ts {
|
||||
const statements: Statement[] = [];
|
||||
if (moduleKind !== ModuleKind.AMD) {
|
||||
if (hasModifier(node, ModifierFlags.Export)) {
|
||||
addNode(statements,
|
||||
statements.push(
|
||||
createStatement(
|
||||
createExportAssignment(
|
||||
node.name,
|
||||
@ -341,7 +341,7 @@ namespace ts {
|
||||
);
|
||||
}
|
||||
else {
|
||||
addNode(statements,
|
||||
statements.push(
|
||||
createVariableStatement(
|
||||
/*modifiers*/ undefined,
|
||||
createVariableDeclarationList([
|
||||
@ -350,14 +350,17 @@ namespace ts {
|
||||
createRequireCall(node),
|
||||
/*location*/ node
|
||||
)
|
||||
])
|
||||
],
|
||||
/*location*/ undefined,
|
||||
/*flags*/ languageVersion >= ScriptTarget.ES6 ? NodeFlags.Const : NodeFlags.None),
|
||||
/*location*/ node
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (hasModifier(node, ModifierFlags.Export)) {
|
||||
addNode(statements,
|
||||
statements.push(
|
||||
createStatement(
|
||||
createExportAssignment(node.name, node.name),
|
||||
/*location*/ node
|
||||
@ -544,6 +547,7 @@ namespace ts {
|
||||
const name = node.name;
|
||||
if (isBindingPattern(name)) {
|
||||
return flattenVariableDestructuringToExpression(
|
||||
context,
|
||||
node,
|
||||
hoistVariableDeclaration,
|
||||
getModuleMemberName,
|
||||
|
||||
@ -577,7 +577,7 @@ namespace ts {
|
||||
}
|
||||
else {
|
||||
// If the variable has a BindingPattern, flatten the variable into multiple assignment expressions.
|
||||
return flattenVariableDestructuringToExpression(node, hoistVariableDeclaration);
|
||||
return flattenVariableDestructuringToExpression(context, node, hoistVariableDeclaration);
|
||||
}
|
||||
}
|
||||
|
||||
@ -691,7 +691,7 @@ namespace ts {
|
||||
const name = firstDeclaration.name;
|
||||
return isIdentifier(name)
|
||||
? name
|
||||
: flattenVariableDestructuringToExpression(firstDeclaration, hoistVariableDeclaration);
|
||||
: flattenVariableDestructuringToExpression(context, firstDeclaration, hoistVariableDeclaration);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1026,7 +1026,7 @@ namespace ts {
|
||||
}
|
||||
|
||||
function substituteDestructuring(node: BinaryExpression) {
|
||||
return flattenDestructuringAssignment(node, /*needsValue*/ true, hoistVariableDeclaration);
|
||||
return flattenDestructuringAssignment(context, node, /*needsValue*/ true, hoistVariableDeclaration);
|
||||
}
|
||||
|
||||
function substitutePostfixUnaryExpression(node: PostfixUnaryExpression): Expression {
|
||||
|
||||
@ -2072,6 +2072,7 @@ namespace ts {
|
||||
const name = node.name;
|
||||
if (isBindingPattern(name)) {
|
||||
return flattenVariableDestructuringToExpression(
|
||||
context,
|
||||
node,
|
||||
hoistVariableDeclaration,
|
||||
getNamespaceMemberName,
|
||||
|
||||
@ -21,7 +21,6 @@ namespace ts {
|
||||
export interface TextRange {
|
||||
pos: number;
|
||||
end: number;
|
||||
/* @internal */ disableSourceMap?: boolean; // Whether a synthesized text range disables source maps for its contents (used by transforms).
|
||||
}
|
||||
|
||||
// token > SyntaxKind.Identifer => token is a keyword
|
||||
@ -2114,7 +2113,7 @@ namespace ts {
|
||||
jsxFlags?: JsxFlags; // flags for knowing what kind of element/attributes we're dealing with
|
||||
resolvedJsxType?: Type; // resolved element attributes type of a JSX openinglike element
|
||||
hasSuperCall?: boolean; // recorded result when we try to find super-call. We only try to find one if this flag is undefined, indicating that we haven't made an attempt.
|
||||
superCall?: ExpressionStatement; // Cached first super-call found in the constructor. Used in checking whether super is called before this-accessing
|
||||
superCall?: ExpressionStatement; // Cached first super-call found in the constructor. Used in checking whether super is called before this-accessing
|
||||
}
|
||||
|
||||
export const enum TypeFlags {
|
||||
@ -2852,6 +2851,8 @@ namespace ts {
|
||||
EmitCommentsOfNotEmittedParent = 1 << 9, // Emits comments of missing parent nodes.
|
||||
NoSubstitution = 1 << 10, // Disables further substitution of an expression.
|
||||
CapturesThis = 1 << 11, // The function captures a lexical `this`
|
||||
NoSourceMap = 1 << 12, // Do not emit a source map location for this node.
|
||||
NoNestedSourceMaps = 1 << 13, // Do not emit source map locations for children of this node.
|
||||
}
|
||||
|
||||
/** Additional context provided to `visitEachChild` */
|
||||
|
||||
@ -30,12 +30,6 @@ var __extends = (this && this.__extends) || function (d, b) {
|
||||
var B = (function () {
|
||||
function B() {
|
||||
}
|
||||
Object.defineProperty(B.prototype, "readonlyProp", {
|
||||
get: function () { },
|
||||
set: function (val) { },
|
||||
enumerable: true,
|
||||
configurable: true
|
||||
});
|
||||
return B;
|
||||
}());
|
||||
var C = (function (_super) {
|
||||
|
||||
@ -52,18 +52,6 @@ var __extends = (this && this.__extends) || function (d, b) {
|
||||
var B = (function () {
|
||||
function B() {
|
||||
}
|
||||
Object.defineProperty(B.prototype, "readonlyProp", {
|
||||
get: function () { },
|
||||
enumerable: true,
|
||||
configurable: true
|
||||
});
|
||||
Object.defineProperty(B.prototype, "mismatch", {
|
||||
get: function () { },
|
||||
set: function (val) { } // error, not same type
|
||||
,
|
||||
enumerable: true,
|
||||
configurable: true
|
||||
});
|
||||
return B;
|
||||
}());
|
||||
var C = (function (_super) {
|
||||
@ -97,11 +85,6 @@ var WrongTypePropertyImpl = (function (_super) {
|
||||
var WrongTypeAccessor = (function () {
|
||||
function WrongTypeAccessor() {
|
||||
}
|
||||
Object.defineProperty(WrongTypeAccessor.prototype, "num", {
|
||||
get: function () { },
|
||||
enumerable: true,
|
||||
configurable: true
|
||||
});
|
||||
return WrongTypeAccessor;
|
||||
}());
|
||||
var WrongTypeAccessorImpl = (function (_super) {
|
||||
@ -128,7 +111,6 @@ var AbstractAccessorMismatch = (function () {
|
||||
function AbstractAccessorMismatch() {
|
||||
}
|
||||
Object.defineProperty(AbstractAccessorMismatch.prototype, "p1", {
|
||||
get: function () { },
|
||||
set: function (val) { },
|
||||
enumerable: true,
|
||||
configurable: true
|
||||
@ -136,7 +118,6 @@ var AbstractAccessorMismatch = (function () {
|
||||
;
|
||||
Object.defineProperty(AbstractAccessorMismatch.prototype, "p2", {
|
||||
get: function () { return "should work"; },
|
||||
set: function (val) { },
|
||||
enumerable: true,
|
||||
configurable: true
|
||||
});
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user