Skip to content

Commit 49f126d

Browse files
committed
Merge branch 'main' into refactor-mod-ops
2 parents ab9cc19 + aec8eb3 commit 49f126d

30 files changed

+3770
-4156
lines changed

src/compiler.ts

Lines changed: 12 additions & 144 deletions
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ import {
195195
writeF32,
196196
writeF64,
197197
writeV128,
198-
uniqueMap,
198+
cloneMap,
199199
isPowerOf2,
200200
v128_zero,
201201
readI32,
@@ -921,58 +921,7 @@ export class Compiler extends DiagnosticEmitter {
921921
element.identifierNode.range
922922
);
923923
}
924-
925-
// === Elements =================================================================================
926-
927-
/** Compiles any element. */
928-
compileElement(element: Element, compileMembers: bool = true): void {
929-
switch (element.kind) {
930-
case ElementKind.GLOBAL: {
931-
this.compileGlobal(<Global>element);
932-
break;
933-
}
934-
case ElementKind.ENUM: {
935-
this.compileEnum(<Enum>element);
936-
break;
937-
}
938-
case ElementKind.FUNCTION_PROTOTYPE: {
939-
if (!element.is(CommonFlags.GENERIC)) {
940-
let functionInstance = this.resolver.resolveFunction(<FunctionPrototype>element, null);
941-
if (functionInstance) this.compileFunction(functionInstance);
942-
}
943-
break;
944-
}
945-
case ElementKind.CLASS_PROTOTYPE: {
946-
if (!element.is(CommonFlags.GENERIC)) {
947-
let classInstance = this.resolver.resolveClass(<ClassPrototype>element, null);
948-
if (classInstance) this.compileClass(classInstance);
949-
}
950-
break;
951-
}
952-
case ElementKind.PROPERTY_PROTOTYPE: {
953-
let propertyInstance = this.resolver.resolveProperty(<PropertyPrototype>element);
954-
if (propertyInstance) this.compileProperty(propertyInstance);
955-
break;
956-
}
957-
case ElementKind.INTERFACE_PROTOTYPE:
958-
case ElementKind.NAMESPACE:
959-
case ElementKind.TYPEDEFINITION:
960-
case ElementKind.ENUMVALUE:
961-
case ElementKind.INDEXSIGNATURE: break;
962-
default: assert(false);
963-
}
964-
if (compileMembers) {
965-
let members = element.members;
966-
if (members) {
967-
// TODO: for (let element of members.values()) {
968-
for (let _values = Map_values(members), i = 0, k = _values.length; i < k; ++i) {
969-
let element = unchecked(_values[i]);
970-
this.compileElement(element);
971-
}
972-
}
973-
}
974-
}
975-
924+
976925
// files
977926

978927
/** Compiles the file matching the specified path. */
@@ -1631,87 +1580,6 @@ export class Compiler extends DiagnosticEmitter {
16311580
return true;
16321581
}
16331582

1634-
// === Classes ==================================================================================
1635-
1636-
/** Compiles a priorly resolved class. */
1637-
compileClass(instance: Class): bool {
1638-
if (instance.is(CommonFlags.COMPILED)) return true;
1639-
instance.set(CommonFlags.COMPILED);
1640-
var prototype = instance.prototype;
1641-
var staticMembers = (<ClassPrototype>prototype).members;
1642-
if (staticMembers) {
1643-
// TODO: for (let element of staticMembers.values()) {
1644-
for (let _values = Map_values(staticMembers), i = 0, k = _values.length; i < k; ++i) {
1645-
let element = unchecked(_values[i]);
1646-
switch (element.kind) {
1647-
case ElementKind.GLOBAL: {
1648-
this.compileGlobal(<Global>element);
1649-
break;
1650-
}
1651-
case ElementKind.FUNCTION_PROTOTYPE: {
1652-
if (element.is(CommonFlags.GENERIC)) break;
1653-
let functionInstance = this.resolver.resolveFunction(<FunctionPrototype>element, null);
1654-
if (!functionInstance) break;
1655-
element = functionInstance;
1656-
// fall-through
1657-
}
1658-
case ElementKind.FUNCTION: {
1659-
this.compileFunction(<Function>element);
1660-
break;
1661-
}
1662-
case ElementKind.PROPERTY_PROTOTYPE: {
1663-
let propertyInstance = this.resolver.resolveProperty(<PropertyPrototype>element);
1664-
if (!propertyInstance) break;
1665-
element = propertyInstance;
1666-
// fall-through
1667-
}
1668-
case ElementKind.PROPERTY: {
1669-
this.compileProperty(<Property>element);
1670-
break;
1671-
}
1672-
}
1673-
}
1674-
}
1675-
this.ensureConstructor(instance, instance.identifierNode);
1676-
this.checkFieldInitialization(instance);
1677-
1678-
var instanceMembers = instance.members;
1679-
if (instanceMembers) {
1680-
// TODO: for (let element of instanceMembers.values()) {
1681-
for (let _values = Map_values(instanceMembers), i = 0, k = _values.length; i < k; ++i) {
1682-
let element = unchecked(_values[i]);
1683-
switch (element.kind) {
1684-
case ElementKind.FUNCTION_PROTOTYPE: {
1685-
if (element.is(CommonFlags.GENERIC)) break;
1686-
let functionInstance = this.resolver.resolveFunction(<FunctionPrototype>element, null);
1687-
if (!functionInstance) break;
1688-
element = functionInstance;
1689-
// fall-through
1690-
}
1691-
case ElementKind.FUNCTION: {
1692-
this.compileFunction(<Function>element);
1693-
break;
1694-
}
1695-
case ElementKind.FIELD: {
1696-
this.compileField(<Field>element);
1697-
break;
1698-
}
1699-
case ElementKind.PROPERTY_PROTOTYPE: {
1700-
let propertyInstance = this.resolver.resolveProperty(<PropertyPrototype>element);
1701-
if (!propertyInstance) break;
1702-
element = propertyInstance;
1703-
// fall-through
1704-
}
1705-
case ElementKind.PROPERTY: {
1706-
this.compileProperty(<Property>element);
1707-
break;
1708-
}
1709-
}
1710-
}
1711-
}
1712-
return true;
1713-
}
1714-
17151583
/** Compiles an instance field to a getter and a setter. */
17161584
compileField(instance: Field): bool {
17171585
this.compileFieldGetter(instance);
@@ -2980,7 +2848,7 @@ export class Compiler extends DiagnosticEmitter {
29802848
type = resolver.resolveType( // reports
29812849
typeNode,
29822850
flow.actualFunction,
2983-
uniqueMap(flow.contextualTypeArguments)
2851+
cloneMap(flow.contextualTypeArguments)
29842852
);
29852853
if (!type) continue;
29862854
this.checkTypeSupported(type, typeNode);
@@ -3758,7 +3626,7 @@ export class Compiler extends DiagnosticEmitter {
37583626
let toType = this.resolver.resolveType( // reports
37593627
assert(expression.toType),
37603628
flow.actualFunction,
3761-
uniqueMap(flow.contextualTypeArguments)
3629+
cloneMap(flow.contextualTypeArguments)
37623630
);
37633631
if (!toType) return this.module.unreachable();
37643632
return this.compileExpression(expression.expression, toType, inheritedConstraints | Constraints.CONV_EXPLICIT);
@@ -6551,7 +6419,7 @@ export class Compiler extends DiagnosticEmitter {
65516419
assert(typeParameterNodes),
65526420
typeArgumentNodes,
65536421
this.currentFlow.actualFunction.parent,
6554-
uniqueMap<string,Type>(this.currentFlow.contextualTypeArguments), // don't update
6422+
cloneMap(this.currentFlow.contextualTypeArguments), // don't update
65556423
expression
65566424
);
65576425
}
@@ -7465,7 +7333,7 @@ export class Compiler extends DiagnosticEmitter {
74657333
DecoratorFlags.NONE
74667334
);
74677335
var instance: Function | null;
7468-
var contextualTypeArguments = uniqueMap(flow.contextualTypeArguments);
7336+
var contextualTypeArguments = cloneMap(flow.contextualTypeArguments);
74697337
var module = this.module;
74707338

74717339
// compile according to context. this differs from a normal function in that omitted parameter
@@ -7847,7 +7715,7 @@ export class Compiler extends DiagnosticEmitter {
78477715
let functionInstance = this.resolver.resolveFunction(
78487716
functionPrototype,
78497717
null,
7850-
uniqueMap<string,Type>(flow.contextualTypeArguments)
7718+
cloneMap(flow.contextualTypeArguments)
78517719
);
78527720
if (!functionInstance || !this.compileFunction(functionInstance)) return module.unreachable();
78537721
if (functionInstance.hasDecorator(DecoratorFlags.BUILTIN)) {
@@ -7902,7 +7770,7 @@ export class Compiler extends DiagnosticEmitter {
79027770
var expectedType = this.resolver.resolveType(
79037771
expression.isType,
79047772
flow.actualFunction,
7905-
uniqueMap(flow.contextualTypeArguments)
7773+
cloneMap(flow.contextualTypeArguments)
79067774
);
79077775
if (!expectedType) {
79087776
this.currentType = Type.bool;
@@ -8280,7 +8148,7 @@ export class Compiler extends DiagnosticEmitter {
82808148
let instance = this.resolver.resolveFunction(
82818149
<FunctionPrototype>target,
82828150
null,
8283-
uniqueMap<string,Type>(),
8151+
new Map(),
82848152
ReportMode.SWALLOW
82858153
);
82868154
if (!instance) break;
@@ -8866,14 +8734,14 @@ export class Compiler extends DiagnosticEmitter {
88668734
classInstance = this.resolver.resolveClass(
88678735
classPrototype,
88688736
classReference.typeArguments,
8869-
uniqueMap<string,Type>(flow.contextualTypeArguments)
8737+
cloneMap(flow.contextualTypeArguments)
88708738
);
88718739
} else {
88728740
classInstance = this.resolver.resolveClassInclTypeArguments(
88738741
classPrototype,
88748742
typeArguments,
88758743
flow.actualFunction.parent, // relative to caller
8876-
uniqueMap<string,Type>(flow.contextualTypeArguments),
8744+
cloneMap(flow.contextualTypeArguments),
88778745
expression
88788746
);
88798747
}
@@ -8905,7 +8773,7 @@ export class Compiler extends DiagnosticEmitter {
89058773
// clone base constructor if a derived class. note that we cannot just
89068774
// call the base ctor since the derived class may have additional fields.
89078775
let baseClass = classInstance.base;
8908-
let contextualTypeArguments = uniqueMap(classInstance.contextualTypeArguments);
8776+
let contextualTypeArguments = cloneMap(classInstance.contextualTypeArguments);
89098777
if (baseClass) {
89108778
let baseCtor = this.ensureConstructor(baseClass, reportNode);
89118779
this.checkFieldInitialization(baseClass, reportNode);

src/flow.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ import {
8585

8686
import {
8787
BitSet,
88-
uniqueMap
88+
cloneMap
8989
} from "./util";
9090

9191
import {
@@ -314,7 +314,7 @@ export class Flow {
314314
branch.localFlags = this.localFlags.slice();
315315
if (this.actualFunction.is(CommonFlags.CONSTRUCTOR)) {
316316
let thisFieldFlags = assert(this.thisFieldFlags);
317-
branch.thisFieldFlags = uniqueMap<Field,FieldFlags>(thisFieldFlags);
317+
branch.thisFieldFlags = cloneMap(thisFieldFlags);
318318
} else {
319319
assert(!this.thisFieldFlags);
320320
}

src/program.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2979,15 +2979,15 @@ export abstract class DeclaredElement extends Element {
29792979
if (kind == base.kind) {
29802980
switch (kind) {
29812981
case ElementKind.FUNCTION: {
2982-
return (<Function>self).signature.isAssignableTo((<Function>base).signature, /* sameSize */ true);
2982+
return (<Function>self).signature.isAssignableTo((<Function>base).signature);
29832983
}
29842984
case ElementKind.PROPERTY: {
29852985
let selfProperty = <Property>self;
29862986
let baseProperty = <Property>base;
29872987
let selfGetter = selfProperty.getterInstance;
29882988
let baseGetter = baseProperty.getterInstance;
29892989
if (selfGetter) {
2990-
if (!baseGetter || !selfGetter.signature.isAssignableTo(baseGetter.signature, true)) {
2990+
if (!baseGetter || !selfGetter.signature.isAssignableTo(baseGetter.signature)) {
29912991
return false;
29922992
}
29932993
} else if (baseGetter) {
@@ -2996,7 +2996,7 @@ export abstract class DeclaredElement extends Element {
29962996
let selfSetter = selfProperty.setterInstance;
29972997
let baseSetter = baseProperty.setterInstance;
29982998
if (selfSetter) {
2999-
if (!baseSetter || !selfSetter.signature.isAssignableTo(baseSetter.signature, true)) {
2999+
if (!baseSetter || !selfSetter.signature.isAssignableTo(baseSetter.signature)) {
30003000
return false;
30013001
}
30023002
} else if (baseSetter) {

0 commit comments

Comments
 (0)