Skip to content

Commit 5dcba5f

Browse files
monomorphic node experiment.
1 parent d8086f1 commit 5dcba5f

File tree

2 files changed

+1365
-52
lines changed

2 files changed

+1365
-52
lines changed

src/compiler/factory/nodeFactory.ts

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6118,15 +6118,18 @@ export function createNodeFactory(flags: NodeFactoryFlags, baseFactory: BaseNode
61186118
// work, we should consider switching explicit property assignments instead of using `for..in`.
61196119
const node = baseFactory.createBaseSourceFileNode(SyntaxKind.SourceFile) as Mutable<SourceFile>;
61206120
node.flags |= source.flags & ~NodeFlags.Synthesized;
6121-
for (const p in source) {
6122-
if (hasProperty(node, p) || !hasProperty(source, p)) {
6121+
copyBaseNodeProperties(source, node);
6122+
const sourceData = (source as any).data ?? source;
6123+
const nodeData = (node as any).data ?? node;
6124+
for (const p in sourceData) {
6125+
if (hasProperty(nodeData, p) || !hasProperty(sourceData, p)) {
61236126
continue;
61246127
}
61256128
if (p === "emitNode") {
6126-
node.emitNode = undefined;
6129+
nodeData.emitNode = undefined;
61276130
continue;
61286131
}
6129-
(node as any)[p] = (source as any)[p];
6132+
nodeData[p] = sourceData[p];
61306133
}
61316134
return node;
61326135
}
@@ -6376,18 +6379,28 @@ export function createNodeFactory(flags: NodeFactoryFlags, baseFactory: BaseNode
63766379
(clone as Mutable<T>).flags |= node.flags & ~NodeFlags.Synthesized;
63776380
(clone as Mutable<T>).transformFlags = node.transformFlags;
63786381
setOriginal(clone, node);
6379-
6380-
for (const key in node) {
6381-
if (hasProperty(clone, key) || !hasProperty(node, key)) {
6382+
copyBaseNodeProperties(node, clone);
6383+
const nodeData = (node as any).data ?? node;
6384+
const cloneData = (clone as any).data ?? clone;
6385+
for (const key in nodeData) {
6386+
if (hasProperty(cloneData, key) || !hasProperty(nodeData, key)) {
63826387
continue;
63836388
}
6384-
6385-
clone[key] = node[key];
6389+
cloneData[key] = nodeData[key];
63866390
}
6387-
63886391
return clone;
63896392
}
6390-
6393+
function copyBaseNodeProperties(node: Node, clone: Mutable<Node>) {
6394+
clone.pos = node.pos;
6395+
clone.end = node.end;
6396+
clone.kind = node.kind;
6397+
clone.id = node.id;
6398+
clone.modifierFlagsCache = node.modifierFlagsCache;
6399+
clone.transformFlags = node.transformFlags;
6400+
clone.parent = node.parent;
6401+
clone.original = node.original;
6402+
clone.emitNode = node.emitNode;
6403+
}
63916404
// compound nodes
63926405
function createImmediatelyInvokedFunctionExpression(statements: readonly Statement[]): ImmediatelyInvokedFunctionExpression;
63936406
function createImmediatelyInvokedFunctionExpression(statements: readonly Statement[], param: ParameterDeclaration, paramValue: Expression): ImmediatelyInvokedFunctionExpression;

0 commit comments

Comments
 (0)