mirror of
https://github.com/fluencelabs/assemblyscript
synced 2025-04-25 15:12:12 +00:00
Infer function expressions in matching contexts (#514)
* legalizes omitting types on function expressions within function type contexts * legalizes omitting any number of arguments
This commit is contained in:
parent
2945af6557
commit
e8b0767143
32
src/ast.ts
32
src/ast.ts
@ -864,6 +864,7 @@ export abstract class Node {
|
||||
body: Statement | null,
|
||||
decorators: DecoratorNode[] | null,
|
||||
flags: CommonFlags,
|
||||
arrowKind: ArrowKind,
|
||||
range: Range
|
||||
): FunctionDeclaration {
|
||||
var stmt = new FunctionDeclaration();
|
||||
@ -874,6 +875,7 @@ export abstract class Node {
|
||||
stmt.signature = signature;
|
||||
stmt.body = body;
|
||||
stmt.decorators = decorators;
|
||||
stmt.arrowKind = arrowKind;
|
||||
return stmt;
|
||||
}
|
||||
|
||||
@ -1773,6 +1775,16 @@ export class ForStatement extends Statement {
|
||||
statement: Statement;
|
||||
}
|
||||
|
||||
/** Indicates the kind of an array function. */
|
||||
export const enum ArrowKind {
|
||||
/** Not an arrow function. */
|
||||
NONE,
|
||||
/** Parenthesized parameter list. */
|
||||
ARROW_PARENTHESIZED,
|
||||
/** Single parameter without parenthesis. */
|
||||
ARROW_SINGLE
|
||||
}
|
||||
|
||||
/** Represents a `function` declaration. */
|
||||
export class FunctionDeclaration extends DeclarationStatement {
|
||||
kind = NodeKind.FUNCTIONDECLARATION;
|
||||
@ -1783,6 +1795,8 @@ export class FunctionDeclaration extends DeclarationStatement {
|
||||
signature: SignatureNode;
|
||||
/** Body statement. Usually a block. */
|
||||
body: Statement | null;
|
||||
/** Arrow function kind, if applicable. */
|
||||
arrowKind: ArrowKind;
|
||||
|
||||
get isGeneric(): bool {
|
||||
var typeParameters = this.typeParameters;
|
||||
@ -1792,7 +1806,14 @@ export class FunctionDeclaration extends DeclarationStatement {
|
||||
/** Clones this function declaration. */
|
||||
clone(): FunctionDeclaration {
|
||||
return Node.createFunctionDeclaration(
|
||||
this.name, this.typeParameters, this.signature, this.body, this.decorators, this.flags, this.range
|
||||
this.name,
|
||||
this.typeParameters,
|
||||
this.signature,
|
||||
this.body,
|
||||
this.decorators,
|
||||
this.flags,
|
||||
this.arrowKind,
|
||||
this.range
|
||||
);
|
||||
}
|
||||
}
|
||||
@ -1960,3 +1981,12 @@ export function mangleInternalPath(path: string): string {
|
||||
if (path.endsWith(".ts")) path = path.substring(0, path.length - 3);
|
||||
return path;
|
||||
}
|
||||
|
||||
/** Tests if the specified type node represents an omitted type. */
|
||||
export function isTypeOmitted(type: CommonTypeNode): bool {
|
||||
if (type.kind == NodeKind.TYPE) {
|
||||
let name = (<TypeNode>type).name;
|
||||
return !(name.next || name.identifier.text.length);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
@ -51,33 +51,31 @@ export enum CommonFlags {
|
||||
INSTANCE = 1 << 17,
|
||||
/** Is a constructor. */
|
||||
CONSTRUCTOR = 1 << 18,
|
||||
/** Is an arrow function. */
|
||||
ARROW = 1 << 19,
|
||||
/** Is a module export. */
|
||||
MODULE_EXPORT = 1 << 20,
|
||||
MODULE_EXPORT = 1 << 19,
|
||||
/** Is a module import. */
|
||||
MODULE_IMPORT = 1 << 21,
|
||||
MODULE_IMPORT = 1 << 20,
|
||||
|
||||
// Compilation states
|
||||
|
||||
/** Is resolved. */
|
||||
RESOLVED = 1 << 22,
|
||||
RESOLVED = 1 << 21,
|
||||
/** Is compiled. */
|
||||
COMPILED = 1 << 23,
|
||||
COMPILED = 1 << 22,
|
||||
/** Has a constant value and is therefore inlined. */
|
||||
INLINED = 1 << 24,
|
||||
INLINED = 1 << 23,
|
||||
/** Is scoped. */
|
||||
SCOPED = 1 << 25,
|
||||
SCOPED = 1 << 24,
|
||||
/** Is a trampoline. */
|
||||
TRAMPOLINE = 1 << 26,
|
||||
TRAMPOLINE = 1 << 25,
|
||||
/** Is a virtual method. */
|
||||
VIRTUAL = 1 << 27,
|
||||
VIRTUAL = 1 << 26,
|
||||
/** Is the main function. */
|
||||
MAIN = 1 << 28,
|
||||
MAIN = 1 << 27,
|
||||
|
||||
// Other
|
||||
|
||||
QUOTED = 1 << 29
|
||||
QUOTED = 1 << 28
|
||||
}
|
||||
|
||||
/** Path delimiter inserted between file system levels. */
|
||||
|
178
src/compiler.ts
178
src/compiler.ts
@ -108,7 +108,9 @@ import {
|
||||
EnumDeclaration,
|
||||
ExportStatement,
|
||||
ExpressionStatement,
|
||||
FieldDeclaration,
|
||||
ForStatement,
|
||||
FunctionDeclaration,
|
||||
IfStatement,
|
||||
ImportStatement,
|
||||
InstanceOfExpression,
|
||||
@ -146,8 +148,7 @@ import {
|
||||
|
||||
nodeIsConstantValue,
|
||||
findDecorator,
|
||||
FieldDeclaration,
|
||||
FunctionDeclaration
|
||||
isTypeOmitted
|
||||
} from "./ast";
|
||||
|
||||
import {
|
||||
@ -1075,7 +1076,7 @@ export class Compiler extends DiagnosticEmitter {
|
||||
assert(bodyNode.kind == NodeKind.EXPRESSION);
|
||||
|
||||
// must be an arrow function
|
||||
assert(instance.is(CommonFlags.ARROW));
|
||||
assert(instance.prototype.arrowKind);
|
||||
|
||||
// none of the following can be an arrow function
|
||||
assert(!instance.isAny(CommonFlags.CONSTRUCTOR | CommonFlags.GET | CommonFlags.SET | CommonFlags.MAIN));
|
||||
@ -2362,7 +2363,7 @@ export class Compiler extends DiagnosticEmitter {
|
||||
break;
|
||||
}
|
||||
case NodeKind.FUNCTION: {
|
||||
expr = this.compileFunctionExpression(<FunctionExpression>expression, contextualType);
|
||||
expr = this.compileFunctionExpression(<FunctionExpression>expression, contextualType.signatureReference);
|
||||
break;
|
||||
}
|
||||
case NodeKind.IDENTIFIER:
|
||||
@ -2711,7 +2712,7 @@ export class Compiler extends DiagnosticEmitter {
|
||||
|
||||
rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);
|
||||
rightType = this.currentType;
|
||||
if (commonType = Type.commonCompatible(leftType, rightType, true)) {
|
||||
if (commonType = Type.commonDenominator(leftType, rightType, true)) {
|
||||
leftExpr = this.convertExpression(
|
||||
leftExpr,
|
||||
leftType,
|
||||
@ -2817,7 +2818,7 @@ export class Compiler extends DiagnosticEmitter {
|
||||
|
||||
rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);
|
||||
rightType = this.currentType;
|
||||
if (commonType = Type.commonCompatible(leftType, rightType, true)) {
|
||||
if (commonType = Type.commonDenominator(leftType, rightType, true)) {
|
||||
leftExpr = this.convertExpression(
|
||||
leftExpr,
|
||||
leftType,
|
||||
@ -2923,7 +2924,7 @@ export class Compiler extends DiagnosticEmitter {
|
||||
|
||||
rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);
|
||||
rightType = this.currentType;
|
||||
if (commonType = Type.commonCompatible(leftType, rightType, true)) {
|
||||
if (commonType = Type.commonDenominator(leftType, rightType, true)) {
|
||||
leftExpr = this.convertExpression(
|
||||
leftExpr,
|
||||
leftType,
|
||||
@ -3029,7 +3030,7 @@ export class Compiler extends DiagnosticEmitter {
|
||||
|
||||
rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);
|
||||
rightType = this.currentType;
|
||||
if (commonType = Type.commonCompatible(leftType, rightType, true)) {
|
||||
if (commonType = Type.commonDenominator(leftType, rightType, true)) {
|
||||
leftExpr = this.convertExpression(
|
||||
leftExpr,
|
||||
leftType,
|
||||
@ -3138,7 +3139,7 @@ export class Compiler extends DiagnosticEmitter {
|
||||
|
||||
rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);
|
||||
rightType = this.currentType;
|
||||
if (commonType = Type.commonCompatible(leftType, rightType, false)) {
|
||||
if (commonType = Type.commonDenominator(leftType, rightType, false)) {
|
||||
leftExpr = this.convertExpression(
|
||||
leftExpr,
|
||||
leftType,
|
||||
@ -3226,7 +3227,7 @@ export class Compiler extends DiagnosticEmitter {
|
||||
|
||||
rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);
|
||||
rightType = this.currentType;
|
||||
if (commonType = Type.commonCompatible(leftType, rightType, false)) {
|
||||
if (commonType = Type.commonDenominator(leftType, rightType, false)) {
|
||||
leftExpr = this.convertExpression(
|
||||
leftExpr,
|
||||
leftType,
|
||||
@ -3324,7 +3325,7 @@ export class Compiler extends DiagnosticEmitter {
|
||||
} else {
|
||||
rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);
|
||||
rightType = this.currentType;
|
||||
if (commonType = Type.commonCompatible(leftType, rightType, false)) {
|
||||
if (commonType = Type.commonDenominator(leftType, rightType, false)) {
|
||||
leftExpr = this.convertExpression(
|
||||
leftExpr,
|
||||
leftType,
|
||||
@ -3420,7 +3421,7 @@ export class Compiler extends DiagnosticEmitter {
|
||||
} else {
|
||||
rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);
|
||||
rightType = this.currentType;
|
||||
if (commonType = Type.commonCompatible(leftType, rightType, false)) {
|
||||
if (commonType = Type.commonDenominator(leftType, rightType, false)) {
|
||||
leftExpr = this.convertExpression(
|
||||
leftExpr,
|
||||
leftType,
|
||||
@ -3516,7 +3517,7 @@ export class Compiler extends DiagnosticEmitter {
|
||||
} else {
|
||||
rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);
|
||||
rightType = this.currentType;
|
||||
if (commonType = Type.commonCompatible(leftType, rightType, false)) {
|
||||
if (commonType = Type.commonDenominator(leftType, rightType, false)) {
|
||||
leftExpr = this.convertExpression(
|
||||
leftExpr,
|
||||
leftType,
|
||||
@ -3713,7 +3714,7 @@ export class Compiler extends DiagnosticEmitter {
|
||||
} else {
|
||||
rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);
|
||||
rightType = this.currentType;
|
||||
if (commonType = Type.commonCompatible(leftType, rightType, false)) {
|
||||
if (commonType = Type.commonDenominator(leftType, rightType, false)) {
|
||||
leftExpr = this.convertExpression(
|
||||
leftExpr,
|
||||
leftType,
|
||||
@ -3828,7 +3829,7 @@ export class Compiler extends DiagnosticEmitter {
|
||||
} else {
|
||||
rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);
|
||||
rightType = this.currentType;
|
||||
if (commonType = Type.commonCompatible(leftType, rightType, false)) {
|
||||
if (commonType = Type.commonDenominator(leftType, rightType, false)) {
|
||||
leftExpr = this.convertExpression(
|
||||
leftExpr,
|
||||
leftType,
|
||||
@ -4222,7 +4223,7 @@ export class Compiler extends DiagnosticEmitter {
|
||||
} else {
|
||||
rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);
|
||||
rightType = this.currentType;
|
||||
if (commonType = Type.commonCompatible(leftType, rightType, false)) {
|
||||
if (commonType = Type.commonDenominator(leftType, rightType, false)) {
|
||||
leftExpr = this.convertExpression(
|
||||
leftExpr,
|
||||
leftType,
|
||||
@ -4318,7 +4319,7 @@ export class Compiler extends DiagnosticEmitter {
|
||||
} else {
|
||||
rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);
|
||||
rightType = this.currentType;
|
||||
if (commonType = Type.commonCompatible(leftType, rightType, false)) {
|
||||
if (commonType = Type.commonDenominator(leftType, rightType, false)) {
|
||||
leftExpr = this.convertExpression(
|
||||
leftExpr,
|
||||
leftType,
|
||||
@ -4417,7 +4418,7 @@ export class Compiler extends DiagnosticEmitter {
|
||||
} else {
|
||||
rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);
|
||||
rightType = this.currentType;
|
||||
if (commonType = Type.commonCompatible(leftType, rightType, false)) {
|
||||
if (commonType = Type.commonDenominator(leftType, rightType, false)) {
|
||||
leftExpr = this.convertExpression(
|
||||
leftExpr,
|
||||
leftType,
|
||||
@ -5085,8 +5086,8 @@ export class Compiler extends DiagnosticEmitter {
|
||||
if (inferredType) {
|
||||
argumentExprs[i] = this.compileExpressionRetainType(argumentExpression, inferredType, WrapMode.NONE);
|
||||
let commonType: Type | null;
|
||||
if (!(commonType = Type.commonCompatible(inferredType, this.currentType, true))) {
|
||||
if (!(commonType = Type.commonCompatible(inferredType, this.currentType, false))) {
|
||||
if (!(commonType = Type.commonDenominator(inferredType, this.currentType, true))) {
|
||||
if (!(commonType = Type.commonDenominator(inferredType, this.currentType, false))) {
|
||||
this.error(
|
||||
DiagnosticCode.Type_0_is_not_assignable_to_type_1,
|
||||
parameterNodes[i].type.range, this.currentType.toString(), inferredType.toString()
|
||||
@ -5901,30 +5902,135 @@ export class Compiler extends DiagnosticEmitter {
|
||||
|
||||
compileFunctionExpression(
|
||||
expression: FunctionExpression,
|
||||
contextualType: Type
|
||||
contextualSignature: Signature | null
|
||||
): ExpressionRef {
|
||||
var declaration = expression.declaration;
|
||||
var name = declaration.name;
|
||||
var simpleName = (name.text.length
|
||||
? name.text
|
||||
: "anonymous") + "|" + this.functionTable.length.toString(10);
|
||||
var declaration = expression.declaration.clone(); // generic contexts can have multiple
|
||||
assert(!declaration.typeParameters); // function expression cannot be generic
|
||||
var flow = this.currentFlow;
|
||||
var actualFunction = flow.actualFunction;
|
||||
var prototype = new FunctionPrototype(
|
||||
simpleName,
|
||||
flow.actualFunction,
|
||||
declaration.clone(), // same function can be compiled multiple times if generic
|
||||
declaration.name.text.length
|
||||
? declaration.name.text
|
||||
: "anonymous|" + (actualFunction.nextAnonymousId++).toString(10),
|
||||
actualFunction,
|
||||
declaration,
|
||||
DecoratorFlags.NONE
|
||||
);
|
||||
var instance = this.compileFunctionUsingTypeArguments(
|
||||
var instance: Function | null;
|
||||
var contextualTypeArguments = makeMap(flow.contextualTypeArguments);
|
||||
|
||||
// compile according to context. this differs from a normal function in that omitted parameter
|
||||
// and return types can be inferred and omitted arguments can be replaced with dummies.
|
||||
if (contextualSignature) {
|
||||
let signatureNode = prototype.signatureNode;
|
||||
let parameterNodes = signatureNode.parameters;
|
||||
let numPresentParameters = parameterNodes.length;
|
||||
|
||||
// must not require more than the maximum number of parameters
|
||||
let parameterTypes = contextualSignature.parameterTypes;
|
||||
let numParameters = parameterTypes.length;
|
||||
if (numPresentParameters > numParameters) {
|
||||
this.error(
|
||||
DiagnosticCode.Expected_0_arguments_but_got_1,
|
||||
expression.range, numParameters.toString(), numPresentParameters.toString()
|
||||
);
|
||||
return this.module.createUnreachable();
|
||||
}
|
||||
|
||||
// check non-omitted parameter types
|
||||
let parameterNames = new Array<string>(numPresentParameters);
|
||||
for (let i = 0; i < numPresentParameters; ++i) {
|
||||
let parameterNode = parameterNodes[i];
|
||||
parameterNames[i] = parameterNode.name.text; // use actual name
|
||||
if (!isTypeOmitted(parameterNode.type)) {
|
||||
let resolvedType = this.resolver.resolveType(
|
||||
parameterNode.type,
|
||||
actualFunction.parent,
|
||||
contextualTypeArguments
|
||||
);
|
||||
if (!resolvedType) return this.module.createUnreachable();
|
||||
if (!parameterTypes[i].isStrictlyAssignableTo(resolvedType)) {
|
||||
this.error(
|
||||
DiagnosticCode.Type_0_is_not_assignable_to_type_1,
|
||||
parameterNode.range, parameterTypes[i].toString(), resolvedType.toString()
|
||||
);
|
||||
return this.module.createUnreachable();
|
||||
}
|
||||
}
|
||||
// any unused parameters are inherited but ignored
|
||||
}
|
||||
|
||||
// check non-omitted return type
|
||||
let returnType = contextualSignature.returnType;
|
||||
if (!isTypeOmitted(signatureNode.returnType)) {
|
||||
let resolvedType = this.resolver.resolveType(
|
||||
signatureNode.returnType,
|
||||
actualFunction.parent,
|
||||
contextualTypeArguments
|
||||
);
|
||||
if (!resolvedType) return this.module.createUnreachable();
|
||||
if (
|
||||
returnType == Type.void
|
||||
? resolvedType != Type.void
|
||||
: !resolvedType.isStrictlyAssignableTo(returnType)
|
||||
) {
|
||||
this.error(
|
||||
DiagnosticCode.Type_0_is_not_assignable_to_type_1,
|
||||
signatureNode.returnType.range, resolvedType.toString(), returnType.toString()
|
||||
);
|
||||
return this.module.createUnreachable();
|
||||
}
|
||||
}
|
||||
|
||||
// check explicit this type
|
||||
let thisType = contextualSignature.thisType;
|
||||
let thisTypeNode = signatureNode.explicitThisType;
|
||||
if (thisTypeNode) {
|
||||
if (!thisType) {
|
||||
this.error(
|
||||
DiagnosticCode._this_cannot_be_referenced_in_current_location,
|
||||
thisTypeNode.range
|
||||
);
|
||||
return this.module.createUnreachable();
|
||||
}
|
||||
let resolvedType = this.resolver.resolveType(
|
||||
thisTypeNode,
|
||||
actualFunction.parent,
|
||||
contextualTypeArguments
|
||||
);
|
||||
if (!resolvedType) return this.module.createUnreachable();
|
||||
if (!thisType.isStrictlyAssignableTo(resolvedType)) {
|
||||
this.error(
|
||||
DiagnosticCode.Type_0_is_not_assignable_to_type_1,
|
||||
thisTypeNode.range, thisType.toString(), resolvedType.toString()
|
||||
);
|
||||
return this.module.createUnreachable();
|
||||
}
|
||||
}
|
||||
|
||||
let signature = new Signature(parameterTypes, returnType, thisType);
|
||||
signature.requiredParameters = numParameters; // !
|
||||
signature.parameterNames = parameterNames;
|
||||
instance = new Function(
|
||||
prototype.name,
|
||||
prototype,
|
||||
signature,
|
||||
contextualTypeArguments
|
||||
);
|
||||
if (!this.compileFunction(instance)) return this.module.createUnreachable();
|
||||
this.currentType = contextualSignature.type;
|
||||
|
||||
// otherwise compile like a normal function
|
||||
} else {
|
||||
instance = this.compileFunctionUsingTypeArguments(
|
||||
prototype,
|
||||
[],
|
||||
makeMap<string,Type>(flow.contextualTypeArguments),
|
||||
declaration
|
||||
contextualTypeArguments
|
||||
);
|
||||
if (!instance) return this.module.createUnreachable();
|
||||
this.currentType = instance.signature.type; // TODO: get cached type?
|
||||
// NOTE that, in order to make this work in every case, the function must be represented by a
|
||||
// value, so we add it and rely on the optimizer to figure out where it can be called directly.
|
||||
this.currentType = instance.signature.type;
|
||||
}
|
||||
|
||||
var index = this.ensureFunctionTableEntry(instance); // reports
|
||||
return index < 0
|
||||
? this.module.createUnreachable()
|
||||
@ -6955,7 +7061,7 @@ export class Compiler extends DiagnosticEmitter {
|
||||
|
||||
outerFlow.inheritMutual(ifThenFlow, ifElseFlow);
|
||||
|
||||
var commonType = Type.commonCompatible(ifThenType, ifElseType, false);
|
||||
var commonType = Type.commonDenominator(ifThenType, ifElseType, false);
|
||||
if (!commonType) {
|
||||
this.error(
|
||||
DiagnosticCode.Type_0_is_not_assignable_to_type_1,
|
||||
|
@ -10,6 +10,7 @@ import {
|
||||
Node,
|
||||
NodeKind,
|
||||
Source,
|
||||
ArrowKind,
|
||||
|
||||
CommonTypeNode,
|
||||
TypeNode,
|
||||
@ -81,7 +82,9 @@ import {
|
||||
ParameterKind,
|
||||
ExportMember,
|
||||
SwitchCase,
|
||||
DeclarationStatement
|
||||
DeclarationStatement,
|
||||
|
||||
isTypeOmitted
|
||||
} from "../ast";
|
||||
|
||||
import {
|
||||
@ -577,7 +580,7 @@ export class ASTBuilder {
|
||||
|
||||
visitFunctionExpression(node: FunctionExpression): void {
|
||||
var declaration = node.declaration;
|
||||
if (!declaration.is(CommonFlags.ARROW)) {
|
||||
if (!declaration.arrowKind) {
|
||||
if (declaration.name.text.length) {
|
||||
this.sb.push("function ");
|
||||
} else {
|
||||
@ -1097,10 +1100,16 @@ export class ASTBuilder {
|
||||
sb.push(">");
|
||||
}
|
||||
}
|
||||
if (node.arrowKind == ArrowKind.ARROW_SINGLE) {
|
||||
let parameters = signature.parameters;
|
||||
assert(parameters.length == 1);
|
||||
assert(!signature.explicitThisType);
|
||||
this.serializeParameter(parameters[0]);
|
||||
} else {
|
||||
sb.push("(");
|
||||
var parameters = signature.parameters;
|
||||
var numParameters = parameters.length;
|
||||
var explicitThisType = signature.explicitThisType;
|
||||
let parameters = signature.parameters;
|
||||
let numParameters = parameters.length;
|
||||
let explicitThisType = signature.explicitThisType;
|
||||
if (explicitThisType) {
|
||||
sb.push("this: ");
|
||||
this.visitTypeNode(explicitThisType);
|
||||
@ -1113,16 +1122,21 @@ export class ASTBuilder {
|
||||
this.serializeParameter(parameters[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
var body = node.body;
|
||||
var returnType = signature.returnType;
|
||||
if (node.is(CommonFlags.ARROW)) {
|
||||
if (node.arrowKind) {
|
||||
if (body) {
|
||||
if (node.arrowKind == ArrowKind.ARROW_SINGLE) {
|
||||
assert(isTypeOmitted(returnType));
|
||||
} else {
|
||||
if (isTypeOmitted(returnType)) {
|
||||
sb.push(")");
|
||||
} else {
|
||||
sb.push("): ");
|
||||
this.visitTypeNode(returnType);
|
||||
}
|
||||
}
|
||||
sb.push(" => ");
|
||||
this.visitNode(body);
|
||||
} else {
|
||||
@ -1551,11 +1565,3 @@ export class ASTBuilder {
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
function isTypeOmitted(type: CommonTypeNode): bool {
|
||||
if (type.kind == NodeKind.TYPE) {
|
||||
let name = (<TypeNode>type).name;
|
||||
return !(name.next || name.identifier.text.length);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
@ -38,6 +38,7 @@ import {
|
||||
CommonTypeNode,
|
||||
TypeNode,
|
||||
SignatureNode,
|
||||
ArrowKind,
|
||||
|
||||
Expression,
|
||||
AssertionKind,
|
||||
@ -66,6 +67,7 @@ import {
|
||||
IfStatement,
|
||||
ImportDeclaration,
|
||||
ImportStatement,
|
||||
IndexSignatureDeclaration,
|
||||
NamespaceDeclaration,
|
||||
ParameterNode,
|
||||
ParameterKind,
|
||||
@ -83,8 +85,7 @@ import {
|
||||
|
||||
mangleInternalPath,
|
||||
nodeIsCallable,
|
||||
nodeIsGenericCallable,
|
||||
IndexSignatureDeclaration
|
||||
nodeIsGenericCallable
|
||||
} from "./ast";
|
||||
|
||||
/** Parser interface. */
|
||||
@ -1349,6 +1350,7 @@ export class Parser extends DiagnosticEmitter {
|
||||
body,
|
||||
decorators,
|
||||
flags,
|
||||
ArrowKind.NONE,
|
||||
tn.range(startPos, tn.pos)
|
||||
);
|
||||
tn.skip(Token.SEMICOLON);
|
||||
@ -1358,7 +1360,7 @@ export class Parser extends DiagnosticEmitter {
|
||||
parseFunctionExpression(tn: Tokenizer): FunctionExpression | null {
|
||||
var startPos = tn.tokenPos;
|
||||
var name: IdentifierExpression;
|
||||
var isArrow = false;
|
||||
var arrowKind = ArrowKind.NONE;
|
||||
|
||||
// either at 'function':
|
||||
// Identifier?
|
||||
@ -1384,7 +1386,7 @@ export class Parser extends DiagnosticEmitter {
|
||||
// Statement
|
||||
|
||||
} else {
|
||||
isArrow = true;
|
||||
arrowKind = ArrowKind.ARROW_PARENTHESIZED;
|
||||
assert(tn.token == Token.OPENPAREN);
|
||||
name = Node.createEmptyIdentifierExpression(tn.range(tn.tokenPos));
|
||||
}
|
||||
@ -1395,14 +1397,14 @@ export class Parser extends DiagnosticEmitter {
|
||||
var parameters = this.parseParameters(tn);
|
||||
if (!parameters) return null;
|
||||
|
||||
return this.parseFunctionExpressionCommon(tn, name, parameters, isArrow, startPos, signatureStart);
|
||||
return this.parseFunctionExpressionCommon(tn, name, parameters, arrowKind, startPos, signatureStart);
|
||||
}
|
||||
|
||||
private parseFunctionExpressionCommon(
|
||||
tn: Tokenizer,
|
||||
name: IdentifierExpression,
|
||||
parameters: ParameterNode[],
|
||||
isArrow: bool,
|
||||
arrowKind: ArrowKind,
|
||||
startPos: i32 = -1,
|
||||
signatureStart: i32 = -1
|
||||
): FunctionExpression | null {
|
||||
@ -1410,18 +1412,14 @@ export class Parser extends DiagnosticEmitter {
|
||||
if (signatureStart < 0) signatureStart = startPos;
|
||||
|
||||
var returnType: CommonTypeNode | null = null;
|
||||
if (tn.skip(Token.COLON)) {
|
||||
if (arrowKind != ArrowKind.ARROW_SINGLE && tn.skip(Token.COLON)) {
|
||||
returnType = this.parseType(tn);
|
||||
if (!returnType) return null;
|
||||
} else {
|
||||
returnType = Node.createOmittedType(tn.range(tn.pos));
|
||||
this.error(
|
||||
DiagnosticCode.Type_expected,
|
||||
returnType.range
|
||||
); // recoverable
|
||||
}
|
||||
|
||||
if (isArrow) {
|
||||
if (arrowKind) {
|
||||
if (!tn.skip(Token.EQUALS_GREATERTHAN)) {
|
||||
this.error(
|
||||
DiagnosticCode._0_expected,
|
||||
@ -1440,7 +1438,7 @@ export class Parser extends DiagnosticEmitter {
|
||||
);
|
||||
|
||||
var body: Statement | null;
|
||||
if (isArrow) {
|
||||
if (arrowKind) {
|
||||
body = this.parseStatement(tn, false);
|
||||
} else {
|
||||
if (!tn.skip(Token.OPENBRACE)) {
|
||||
@ -1460,7 +1458,8 @@ export class Parser extends DiagnosticEmitter {
|
||||
signature,
|
||||
body,
|
||||
null,
|
||||
isArrow ? CommonFlags.ARROW : CommonFlags.NONE,
|
||||
CommonFlags.NONE,
|
||||
arrowKind,
|
||||
tn.range(startPos, tn.pos)
|
||||
);
|
||||
return Node.createFunctionExpression(declaration);
|
||||
@ -3140,7 +3139,7 @@ export class Parser extends DiagnosticEmitter {
|
||||
tn,
|
||||
Node.createEmptyIdentifierExpression(tn.range(startPos)),
|
||||
[],
|
||||
true
|
||||
ArrowKind.ARROW_PARENTHESIZED
|
||||
);
|
||||
}
|
||||
let state = tn.mark();
|
||||
@ -3314,7 +3313,25 @@ export class Parser extends DiagnosticEmitter {
|
||||
);
|
||||
}
|
||||
case Token.IDENTIFIER: {
|
||||
return Node.createIdentifierExpression(tn.readIdentifier(), tn.range(startPos, tn.pos));
|
||||
let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range(startPos, tn.pos));
|
||||
if (tn.peek(true) == Token.EQUALS_GREATERTHAN && !tn.nextTokenOnNewLine) {
|
||||
return this.parseFunctionExpressionCommon(
|
||||
tn,
|
||||
Node.createEmptyIdentifierExpression(tn.range(startPos)),
|
||||
[
|
||||
Node.createParameter(
|
||||
identifier,
|
||||
Node.createOmittedType(identifier.range.atEnd),
|
||||
null,
|
||||
ParameterKind.DEFAULT,
|
||||
identifier.range
|
||||
)
|
||||
],
|
||||
ArrowKind.ARROW_SINGLE,
|
||||
startPos
|
||||
);
|
||||
}
|
||||
return identifier;
|
||||
}
|
||||
case Token.THIS: {
|
||||
return Node.createThisExpression(tn.range(startPos, tn.pos));
|
||||
|
@ -47,6 +47,7 @@ import {
|
||||
TypeParameterNode,
|
||||
CommonTypeNode,
|
||||
TypeNode,
|
||||
ArrowKind,
|
||||
|
||||
Expression,
|
||||
IdentifierExpression,
|
||||
@ -424,7 +425,7 @@ export class Program extends DiagnosticEmitter {
|
||||
),
|
||||
null, false, range)
|
||||
),
|
||||
null, null, flags, range
|
||||
null, null, flags, ArrowKind.NONE, range
|
||||
);
|
||||
}
|
||||
|
||||
@ -2387,6 +2388,11 @@ export class FunctionPrototype extends DeclaredElement {
|
||||
return (<FunctionDeclaration>this.declaration).body;
|
||||
}
|
||||
|
||||
/** Gets the arrow function kind. */
|
||||
get arrowKind(): ArrowKind {
|
||||
return (<FunctionDeclaration>this.declaration).arrowKind;
|
||||
}
|
||||
|
||||
/** Tests if this prototype is bound to a class. */
|
||||
get isBound(): bool {
|
||||
var parent = this.parent;
|
||||
@ -2464,6 +2470,8 @@ export class Function extends TypedElement {
|
||||
|
||||
/** Counting id of inline operations involving this function. */
|
||||
nextInlineId: i32 = 0;
|
||||
/** Counting id of anonymous inner functions. */
|
||||
nextAnonymousId: i32 = 0;
|
||||
|
||||
/** Constructs a new concrete function. */
|
||||
constructor(
|
||||
|
@ -56,7 +56,8 @@ import {
|
||||
AssertionKind,
|
||||
BinaryExpression,
|
||||
ThisExpression,
|
||||
SuperExpression
|
||||
SuperExpression,
|
||||
isTypeOmitted
|
||||
} from "./ast";
|
||||
|
||||
import {
|
||||
@ -140,8 +141,8 @@ export class Resolver extends DiagnosticEmitter {
|
||||
let requiredParameters = 0;
|
||||
let hasRest = false;
|
||||
for (let i = 0; i < numParameters; ++i) {
|
||||
let parameterTypeNode = parameterNodes[i];
|
||||
switch (parameterTypeNode.parameterKind) {
|
||||
let parameterNode = parameterNodes[i];
|
||||
switch (parameterNode.parameterKind) {
|
||||
case ParameterKind.DEFAULT: {
|
||||
requiredParameters = i + 1;
|
||||
break;
|
||||
@ -152,17 +153,36 @@ export class Resolver extends DiagnosticEmitter {
|
||||
break;
|
||||
}
|
||||
}
|
||||
let parameterTypeNode = parameterNode.type;
|
||||
if (isTypeOmitted(parameterTypeNode)) {
|
||||
if (reportMode == ReportMode.REPORT) {
|
||||
this.error(
|
||||
DiagnosticCode.Type_expected,
|
||||
parameterTypeNode.range
|
||||
);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
let parameterType = this.resolveType(
|
||||
assert(parameterTypeNode.type),
|
||||
parameterTypeNode,
|
||||
context,
|
||||
contextualTypeArguments,
|
||||
reportMode
|
||||
);
|
||||
if (!parameterType) return null;
|
||||
parameterTypes[i] = parameterType;
|
||||
parameterNames[i] = parameterTypeNode.name.text;
|
||||
parameterNames[i] = parameterNode.name.text;
|
||||
}
|
||||
let returnTypeNode = (<SignatureNode>node).returnType;
|
||||
if (isTypeOmitted(returnTypeNode)) {
|
||||
if (reportMode == ReportMode.REPORT) {
|
||||
this.error(
|
||||
DiagnosticCode.Type_expected,
|
||||
returnTypeNode.range
|
||||
);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
let returnType: Type | null;
|
||||
if (returnTypeNode) {
|
||||
returnType = this.resolveType(
|
||||
@ -1301,7 +1321,14 @@ export class Resolver extends DiagnosticEmitter {
|
||||
if (parameterDeclaration.parameterKind == ParameterKind.DEFAULT) {
|
||||
requiredParameters = i + 1;
|
||||
}
|
||||
let typeNode = assert(parameterDeclaration.type);
|
||||
let typeNode = parameterDeclaration.type;
|
||||
if (isTypeOmitted(typeNode)) {
|
||||
this.error(
|
||||
DiagnosticCode.Type_expected,
|
||||
typeNode.range
|
||||
);
|
||||
return null;
|
||||
}
|
||||
let parameterType = this.resolveType(
|
||||
typeNode,
|
||||
prototype.parent, // relative to function
|
||||
@ -1320,7 +1347,14 @@ export class Resolver extends DiagnosticEmitter {
|
||||
} else if (prototype.is(CommonFlags.CONSTRUCTOR)) {
|
||||
returnType = assert(classInstance).type; // not annotated
|
||||
} else {
|
||||
let typeNode = assert(signatureNode.returnType);
|
||||
let typeNode = signatureNode.returnType;
|
||||
if (isTypeOmitted(typeNode)) {
|
||||
this.error(
|
||||
DiagnosticCode.Type_expected,
|
||||
typeNode.range
|
||||
);
|
||||
return null;
|
||||
}
|
||||
let type = this.resolveType(
|
||||
typeNode,
|
||||
prototype.parent, // relative to function
|
||||
|
18
src/types.ts
18
src/types.ts
@ -197,7 +197,7 @@ export class Type {
|
||||
return this.cachedNullableType;
|
||||
}
|
||||
|
||||
/** Tests if a value of this type is assignable to a target of the specified type. */
|
||||
/** Tests if a value of this type is assignable to the target type incl. implicit conversion. */
|
||||
isAssignableTo(target: Type, signednessIsRelevant: bool = false): bool {
|
||||
var currentClass: Class | null;
|
||||
var targetClass: Class | null;
|
||||
@ -245,8 +245,20 @@ export class Type {
|
||||
return false;
|
||||
}
|
||||
|
||||
/** Determines the common compatible type of two types, if any. */
|
||||
static commonCompatible(left: Type, right: Type, signednessIsImportant: bool): Type | null {
|
||||
/** Tests if a value of this type is assignable to the target type excl. implicit conversion. */
|
||||
isStrictlyAssignableTo(target: Type, signednessIsRelevant: bool = false): bool {
|
||||
if (this.is(TypeFlags.REFERENCE)) return this.isAssignableTo(target);
|
||||
else if (target.is(TypeFlags.REFERENCE)) return false;
|
||||
if (this.is(TypeFlags.INTEGER)) {
|
||||
return target.is(TypeFlags.INTEGER) && target.size == this.size && (
|
||||
!signednessIsRelevant || this.is(TypeFlags.SIGNED) == target.is(TypeFlags.SIGNED)
|
||||
);
|
||||
}
|
||||
return this.kind == target.kind;
|
||||
}
|
||||
|
||||
/** Determines the common denominator type of two types, if there is any. */
|
||||
static commonDenominator(left: Type, right: Type, signednessIsImportant: bool): Type | null {
|
||||
if (right.isAssignableTo(left, signednessIsImportant)) return left;
|
||||
else if (left.isAssignableTo(right, signednessIsImportant)) return right;
|
||||
return null;
|
||||
|
@ -136,6 +136,20 @@ export class Uint8ClampedArray extends Uint8Array {
|
||||
return SUBARRAY<Uint8ClampedArray, u8>(this, begin, end);
|
||||
}
|
||||
|
||||
reduce<T>(
|
||||
callbackfn: (accumulator: T, value: u8, index: i32, array: Uint8ClampedArray) => T,
|
||||
initialValue: T,
|
||||
): T {
|
||||
return REDUCE<Uint8ClampedArray, u8, T>(this, callbackfn, initialValue);
|
||||
}
|
||||
|
||||
reduceRight<T>(
|
||||
callbackfn: (accumulator: T, value: u8, index: i32, array: Uint8ClampedArray) => T,
|
||||
initialValue: T,
|
||||
): T {
|
||||
return REDUCE_RIGHT<Uint8ClampedArray, u8, T>(this, callbackfn, initialValue);
|
||||
}
|
||||
|
||||
map(callbackfn: (value: u8, index: i32, self: Uint8ClampedArray) => u8): Uint8ClampedArray {
|
||||
return MAP<Uint8ClampedArray, u8>(this, callbackfn);
|
||||
}
|
||||
|
@ -50,6 +50,7 @@ if (args.help) {
|
||||
|
||||
var successes = 0;
|
||||
var failedTests = [];
|
||||
var failedInstantiates = new Map();
|
||||
|
||||
const basedir = path.join(__dirname, "compiler");
|
||||
|
||||
@ -252,6 +253,7 @@ tests.forEach(filename => {
|
||||
} catch (e) {
|
||||
console.log("- " + colorsUtil.red("instantiate ERROR: ") + e.stack);
|
||||
failed = true;
|
||||
failedInstantiates.set(basename, e.message);
|
||||
}
|
||||
|
||||
if (failed) failedTests.push(basename);
|
||||
@ -263,6 +265,10 @@ tests.forEach(filename => {
|
||||
|
||||
if (failedTests.length) {
|
||||
process.exitCode = 1;
|
||||
console.log(colorsUtil.red("ERROR: ") + failedTests.length + " compiler tests failed: " + failedTests.join(", "));
|
||||
console.log(colorsUtil.red("ERROR: ") + colorsUtil.white(failedTests.length + " compiler tests failed:"));
|
||||
failedTests.forEach(name => {
|
||||
var message = failedInstantiates.has(name) ? colorsUtil.gray("[" + failedInstantiates.get(name) + "]") : "";
|
||||
console.log(" " + name + " " + message);
|
||||
});
|
||||
} else
|
||||
console.log("[ " + colorsUtil.white("SUCCESS") + " ]");
|
||||
|
@ -7,7 +7,7 @@
|
||||
(data (i32.const 8) "\0b\00\00\00b\00u\00i\00l\00t\00i\00n\00s\00.\00t\00s")
|
||||
(data (i32.const 40) "\01\00\00\001")
|
||||
(table $0 2 funcref)
|
||||
(elem (i32.const 0) $builtins/test $start:builtins~anonymous|1)
|
||||
(elem (i32.const 0) $builtins/test $start:builtins~anonymous|0)
|
||||
(global $builtins/b (mut i32) (i32.const 0))
|
||||
(global $builtins/i (mut i32) (i32.const 0))
|
||||
(global $builtins/I (mut i64) (i64.const 0))
|
||||
@ -21,7 +21,7 @@
|
||||
(export "table" (table $0))
|
||||
(export "test" (func $builtins/test))
|
||||
(start $start)
|
||||
(func $start:builtins~anonymous|1 (; 1 ;) (type $ii_) (param $0 i32) (param $1 i32)
|
||||
(func $start:builtins~anonymous|0 (; 1 ;) (type $ii_) (param $0 i32) (param $1 i32)
|
||||
nop
|
||||
)
|
||||
(func $start:builtins (; 2 ;) (type $_)
|
||||
|
@ -7,7 +7,7 @@
|
||||
(data (i32.const 8) "\0b\00\00\00b\00u\00i\00l\00t\00i\00n\00s\00.\00t\00s\00")
|
||||
(data (i32.const 40) "\01\00\00\001\00")
|
||||
(table $0 2 funcref)
|
||||
(elem (i32.const 0) $null $start:builtins~anonymous|1)
|
||||
(elem (i32.const 0) $null $start:builtins~anonymous|0)
|
||||
(global $builtins/b (mut i32) (i32.const 0))
|
||||
(global $builtins/i (mut i32) (i32.const 0))
|
||||
(global $builtins/I (mut i64) (i64.const 0))
|
||||
@ -53,7 +53,7 @@
|
||||
(export "table" (table $0))
|
||||
(export "test" (func $builtins/test))
|
||||
(start $start)
|
||||
(func $start:builtins~anonymous|1 (; 1 ;) (type $ii_) (param $0 i32) (param $1 i32)
|
||||
(func $start:builtins~anonymous|0 (; 1 ;) (type $ii_) (param $0 i32) (param $1 i32)
|
||||
nop
|
||||
)
|
||||
(func $start:builtins (; 2 ;) (type $_)
|
||||
|
@ -3,11 +3,12 @@
|
||||
(type $iiii_ (func (param i32 i32 i32 i32)))
|
||||
(type $_ (func))
|
||||
(type $i (func (result i32)))
|
||||
(type $iii (func (param i32 i32) (result i32)))
|
||||
(import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32)))
|
||||
(memory $0 1)
|
||||
(data (i32.const 8) "\16\00\00\00f\00u\00n\00c\00t\00i\00o\00n\00-\00e\00x\00p\00r\00e\00s\00s\00i\00o\00n\00.\00t\00s")
|
||||
(table $0 5 funcref)
|
||||
(elem (i32.const 0) $start:function-expression~someName|3 $start:function-expression~anonymous|1 $start:function-expression~anonymous|1 $start:function-expression~someName|3 $start:function-expression~anonymous|4)
|
||||
(table $0 11 funcref)
|
||||
(elem (i32.const 0) $start:function-expression~someName $start:function-expression~anonymous|0 $start:function-expression~anonymous|0 $start:function-expression~someName $start:function-expression~anonymous|2 $start:function-expression~anonymous|3 $start:function-expression~anonymous|4 $start:function-expression~anonymous|5 $start:function-expression~anonymous|3 $start:function-expression~anonymous|4 $start:function-expression~anonymous|5)
|
||||
(global $function-expression/f1 (mut i32) (i32.const 1))
|
||||
(global $~lib/argc (mut i32) (i32.const 0))
|
||||
(global $function-expression/f2 (mut i32) (i32.const 2))
|
||||
@ -16,16 +17,27 @@
|
||||
(export "memory" (memory $0))
|
||||
(export "table" (table $0))
|
||||
(start $start)
|
||||
(func $start:function-expression~anonymous|1 (; 1 ;) (type $ii) (param $0 i32) (result i32)
|
||||
(func $start:function-expression~anonymous|0 (; 1 ;) (type $ii) (param $0 i32) (result i32)
|
||||
local.get $0
|
||||
)
|
||||
(func $start:function-expression~someName|3 (; 2 ;) (type $_)
|
||||
(func $start:function-expression~someName (; 2 ;) (type $_)
|
||||
nop
|
||||
)
|
||||
(func $start:function-expression~anonymous|4 (; 3 ;) (type $i) (result i32)
|
||||
(func $start:function-expression~anonymous|2 (; 3 ;) (type $i) (result i32)
|
||||
i32.const 1
|
||||
)
|
||||
(func $start:function-expression (; 4 ;) (type $_)
|
||||
(func $start:function-expression~anonymous|3 (; 4 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
|
||||
local.get $0
|
||||
local.get $1
|
||||
i32.add
|
||||
)
|
||||
(func $start:function-expression~anonymous|4 (; 5 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
|
||||
local.get $0
|
||||
)
|
||||
(func $start:function-expression~anonymous|5 (; 6 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
|
||||
i32.const 42
|
||||
)
|
||||
(func $start:function-expression (; 7 ;) (type $_)
|
||||
i32.const 1
|
||||
global.set $~lib/argc
|
||||
i32.const 1
|
||||
@ -74,8 +86,104 @@
|
||||
call $~lib/env/abort
|
||||
unreachable
|
||||
end
|
||||
i32.const 2
|
||||
global.set $~lib/argc
|
||||
i32.const 1
|
||||
i32.const 2
|
||||
i32.const 5
|
||||
call_indirect (type $iii)
|
||||
i32.const 3
|
||||
i32.ne
|
||||
if
|
||||
i32.const 0
|
||||
i32.const 8
|
||||
i32.const 21
|
||||
i32.const 0
|
||||
call $~lib/env/abort
|
||||
unreachable
|
||||
end
|
||||
i32.const 2
|
||||
global.set $~lib/argc
|
||||
i32.const 1
|
||||
i32.const 2
|
||||
i32.const 6
|
||||
call_indirect (type $iii)
|
||||
i32.const 1
|
||||
i32.ne
|
||||
if
|
||||
i32.const 0
|
||||
i32.const 8
|
||||
i32.const 22
|
||||
i32.const 0
|
||||
call $~lib/env/abort
|
||||
unreachable
|
||||
end
|
||||
i32.const 2
|
||||
global.set $~lib/argc
|
||||
i32.const 1
|
||||
i32.const 2
|
||||
i32.const 7
|
||||
call_indirect (type $iii)
|
||||
i32.const 42
|
||||
i32.ne
|
||||
if
|
||||
i32.const 0
|
||||
i32.const 8
|
||||
i32.const 23
|
||||
i32.const 0
|
||||
call $~lib/env/abort
|
||||
unreachable
|
||||
end
|
||||
i32.const 2
|
||||
global.set $~lib/argc
|
||||
i32.const 1
|
||||
i32.const 2
|
||||
i32.const 8
|
||||
call_indirect (type $iii)
|
||||
i32.const 3
|
||||
i32.ne
|
||||
if
|
||||
i32.const 0
|
||||
i32.const 8
|
||||
i32.const 34
|
||||
i32.const 0
|
||||
call $~lib/env/abort
|
||||
unreachable
|
||||
end
|
||||
i32.const 2
|
||||
global.set $~lib/argc
|
||||
i32.const 1
|
||||
i32.const 2
|
||||
i32.const 9
|
||||
call_indirect (type $iii)
|
||||
i32.const 1
|
||||
i32.ne
|
||||
if
|
||||
i32.const 0
|
||||
i32.const 8
|
||||
i32.const 35
|
||||
i32.const 0
|
||||
call $~lib/env/abort
|
||||
unreachable
|
||||
end
|
||||
i32.const 2
|
||||
global.set $~lib/argc
|
||||
i32.const 1
|
||||
i32.const 2
|
||||
i32.const 10
|
||||
call_indirect (type $iii)
|
||||
i32.const 42
|
||||
i32.ne
|
||||
if
|
||||
i32.const 0
|
||||
i32.const 8
|
||||
i32.const 36
|
||||
i32.const 0
|
||||
call $~lib/env/abort
|
||||
unreachable
|
||||
end
|
||||
)
|
||||
(func $start (; 5 ;) (type $_)
|
||||
(func $start (; 8 ;) (type $_)
|
||||
call $start:function-expression
|
||||
)
|
||||
)
|
||||
|
@ -14,3 +14,23 @@ f3();
|
||||
|
||||
var f4 = (): i32 => 1;
|
||||
assert(f4() == 1);
|
||||
|
||||
function testOmitted(fn: (a: i32, b: i32) => i32): i32 {
|
||||
return fn(1, 2);
|
||||
}
|
||||
assert(testOmitted((a, b) => a + b) == 3);
|
||||
assert(testOmitted(a => a) == 1);
|
||||
assert(testOmitted(() => 42) == 42);
|
||||
|
||||
function testOmittedReturn1(): (a: i32, b: i32) => i32 {
|
||||
return (a, b) => a + b;
|
||||
}
|
||||
function testOmittedReturn2(): (a: i32, b: i32) => i32 {
|
||||
return a => a;
|
||||
}
|
||||
function testOmittedReturn3(): (a: i32, b: i32) => i32 {
|
||||
return () => 42;
|
||||
}
|
||||
assert(testOmittedReturn1()(1, 2) == 3);
|
||||
assert(testOmittedReturn2()(1, 2) == 1);
|
||||
assert(testOmittedReturn3()(1, 2) == 42);
|
||||
|
@ -3,11 +3,12 @@
|
||||
(type $iiii_ (func (param i32 i32 i32 i32)))
|
||||
(type $_ (func))
|
||||
(type $i (func (result i32)))
|
||||
(type $iii (func (param i32 i32) (result i32)))
|
||||
(import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32)))
|
||||
(memory $0 1)
|
||||
(data (i32.const 8) "\16\00\00\00f\00u\00n\00c\00t\00i\00o\00n\00-\00e\00x\00p\00r\00e\00s\00s\00i\00o\00n\00.\00t\00s\00")
|
||||
(table $0 5 funcref)
|
||||
(elem (i32.const 0) $null $start:function-expression~anonymous|1 $start:function-expression~anonymous|2 $start:function-expression~someName|3 $start:function-expression~anonymous|4)
|
||||
(table $0 11 funcref)
|
||||
(elem (i32.const 0) $null $start:function-expression~anonymous|0 $start:function-expression~anonymous|1 $start:function-expression~someName $start:function-expression~anonymous|2 $start:function-expression~anonymous|3 $start:function-expression~anonymous|4 $start:function-expression~anonymous|5 $function-expression/testOmittedReturn1~anonymous|0 $function-expression/testOmittedReturn2~anonymous|0 $function-expression/testOmittedReturn3~anonymous|0)
|
||||
(global $function-expression/f1 (mut i32) (i32.const 1))
|
||||
(global $~lib/argc (mut i32) (i32.const 0))
|
||||
(global $function-expression/f2 (mut i32) (i32.const 2))
|
||||
@ -17,19 +18,58 @@
|
||||
(export "memory" (memory $0))
|
||||
(export "table" (table $0))
|
||||
(start $start)
|
||||
(func $start:function-expression~anonymous|1 (; 1 ;) (type $ii) (param $0 i32) (result i32)
|
||||
(func $start:function-expression~anonymous|0 (; 1 ;) (type $ii) (param $0 i32) (result i32)
|
||||
local.get $0
|
||||
)
|
||||
(func $start:function-expression~anonymous|2 (; 2 ;) (type $ii) (param $0 i32) (result i32)
|
||||
(func $start:function-expression~anonymous|1 (; 2 ;) (type $ii) (param $0 i32) (result i32)
|
||||
local.get $0
|
||||
)
|
||||
(func $start:function-expression~someName|3 (; 3 ;) (type $_)
|
||||
(func $start:function-expression~someName (; 3 ;) (type $_)
|
||||
nop
|
||||
)
|
||||
(func $start:function-expression~anonymous|4 (; 4 ;) (type $i) (result i32)
|
||||
(func $start:function-expression~anonymous|2 (; 4 ;) (type $i) (result i32)
|
||||
i32.const 1
|
||||
)
|
||||
(func $start:function-expression (; 5 ;) (type $_)
|
||||
(func $start:function-expression~anonymous|3 (; 5 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
|
||||
local.get $0
|
||||
local.get $1
|
||||
i32.add
|
||||
)
|
||||
(func $function-expression/testOmitted (; 6 ;) (type $ii) (param $0 i32) (result i32)
|
||||
i32.const 2
|
||||
global.set $~lib/argc
|
||||
i32.const 1
|
||||
i32.const 2
|
||||
local.get $0
|
||||
call_indirect (type $iii)
|
||||
)
|
||||
(func $start:function-expression~anonymous|4 (; 7 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
|
||||
local.get $0
|
||||
)
|
||||
(func $start:function-expression~anonymous|5 (; 8 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
|
||||
i32.const 42
|
||||
)
|
||||
(func $function-expression/testOmittedReturn1~anonymous|0 (; 9 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
|
||||
local.get $0
|
||||
local.get $1
|
||||
i32.add
|
||||
)
|
||||
(func $function-expression/testOmittedReturn1 (; 10 ;) (type $i) (result i32)
|
||||
i32.const 8
|
||||
)
|
||||
(func $function-expression/testOmittedReturn2~anonymous|0 (; 11 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
|
||||
local.get $0
|
||||
)
|
||||
(func $function-expression/testOmittedReturn2 (; 12 ;) (type $i) (result i32)
|
||||
i32.const 9
|
||||
)
|
||||
(func $function-expression/testOmittedReturn3~anonymous|0 (; 13 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
|
||||
i32.const 42
|
||||
)
|
||||
(func $function-expression/testOmittedReturn3 (; 14 ;) (type $i) (result i32)
|
||||
i32.const 10
|
||||
)
|
||||
(func $start:function-expression (; 15 ;) (type $_)
|
||||
block (result i32)
|
||||
i32.const 1
|
||||
global.set $~lib/argc
|
||||
@ -89,10 +129,106 @@
|
||||
call $~lib/env/abort
|
||||
unreachable
|
||||
end
|
||||
i32.const 5
|
||||
call $function-expression/testOmitted
|
||||
i32.const 3
|
||||
i32.eq
|
||||
i32.eqz
|
||||
if
|
||||
i32.const 0
|
||||
i32.const 8
|
||||
i32.const 21
|
||||
i32.const 0
|
||||
call $~lib/env/abort
|
||||
unreachable
|
||||
end
|
||||
i32.const 6
|
||||
call $function-expression/testOmitted
|
||||
i32.const 1
|
||||
i32.eq
|
||||
i32.eqz
|
||||
if
|
||||
i32.const 0
|
||||
i32.const 8
|
||||
i32.const 22
|
||||
i32.const 0
|
||||
call $~lib/env/abort
|
||||
unreachable
|
||||
end
|
||||
i32.const 7
|
||||
call $function-expression/testOmitted
|
||||
i32.const 42
|
||||
i32.eq
|
||||
i32.eqz
|
||||
if
|
||||
i32.const 0
|
||||
i32.const 8
|
||||
i32.const 23
|
||||
i32.const 0
|
||||
call $~lib/env/abort
|
||||
unreachable
|
||||
end
|
||||
block (result i32)
|
||||
i32.const 2
|
||||
global.set $~lib/argc
|
||||
i32.const 1
|
||||
i32.const 2
|
||||
call $function-expression/testOmittedReturn1
|
||||
call_indirect (type $iii)
|
||||
end
|
||||
i32.const 3
|
||||
i32.eq
|
||||
i32.eqz
|
||||
if
|
||||
i32.const 0
|
||||
i32.const 8
|
||||
i32.const 34
|
||||
i32.const 0
|
||||
call $~lib/env/abort
|
||||
unreachable
|
||||
end
|
||||
block (result i32)
|
||||
i32.const 2
|
||||
global.set $~lib/argc
|
||||
i32.const 1
|
||||
i32.const 2
|
||||
call $function-expression/testOmittedReturn2
|
||||
call_indirect (type $iii)
|
||||
end
|
||||
i32.const 1
|
||||
i32.eq
|
||||
i32.eqz
|
||||
if
|
||||
i32.const 0
|
||||
i32.const 8
|
||||
i32.const 35
|
||||
i32.const 0
|
||||
call $~lib/env/abort
|
||||
unreachable
|
||||
end
|
||||
block (result i32)
|
||||
i32.const 2
|
||||
global.set $~lib/argc
|
||||
i32.const 1
|
||||
i32.const 2
|
||||
call $function-expression/testOmittedReturn3
|
||||
call_indirect (type $iii)
|
||||
end
|
||||
i32.const 42
|
||||
i32.eq
|
||||
i32.eqz
|
||||
if
|
||||
i32.const 0
|
||||
i32.const 8
|
||||
i32.const 36
|
||||
i32.const 0
|
||||
call $~lib/env/abort
|
||||
unreachable
|
||||
end
|
||||
)
|
||||
(func $start (; 6 ;) (type $_)
|
||||
(func $start (; 16 ;) (type $_)
|
||||
call $start:function-expression
|
||||
)
|
||||
(func $null (; 7 ;) (type $_)
|
||||
(func $null (; 17 ;) (type $_)
|
||||
)
|
||||
)
|
||||
|
@ -8,24 +8,24 @@
|
||||
(memory $0 1)
|
||||
(data (i32.const 8) "\11\00\00\00f\00u\00n\00c\00t\00i\00o\00n\00-\00t\00y\00p\00e\00s\00.\00t\00s")
|
||||
(table $0 5 funcref)
|
||||
(elem (i32.const 0) $null $function-types/makeAdder<i32>~anonymous|1 $function-types/makeAdder<i64>~anonymous|2 $function-types/makeAdder<f64>~anonymous|3 $function-types/makeAdder<i32>~anonymous|1)
|
||||
(elem (i32.const 0) $null $function-types/makeAdder<i32>~anonymous|0 $function-types/makeAdder<i64>~anonymous|0 $function-types/makeAdder<f64>~anonymous|0 $function-types/makeAdder<i32>~anonymous|0)
|
||||
(global $function-types/i32Adder (mut i32) (i32.const 0))
|
||||
(global $~lib/argc (mut i32) (i32.const 0))
|
||||
(global $function-types/i64Adder (mut i32) (i32.const 0))
|
||||
(export "memory" (memory $0))
|
||||
(export "table" (table $0))
|
||||
(start $start)
|
||||
(func $function-types/makeAdder<i32>~anonymous|1 (; 1 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
|
||||
(func $function-types/makeAdder<i32>~anonymous|0 (; 1 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
|
||||
local.get $0
|
||||
local.get $1
|
||||
i32.add
|
||||
)
|
||||
(func $function-types/makeAdder<i64>~anonymous|2 (; 2 ;) (type $III) (param $0 i64) (param $1 i64) (result i64)
|
||||
(func $function-types/makeAdder<i64>~anonymous|0 (; 2 ;) (type $III) (param $0 i64) (param $1 i64) (result i64)
|
||||
local.get $0
|
||||
local.get $1
|
||||
i64.add
|
||||
)
|
||||
(func $function-types/makeAdder<f64>~anonymous|3 (; 3 ;) (type $FFF) (param $0 f64) (param $1 f64) (result f64)
|
||||
(func $function-types/makeAdder<f64>~anonymous|0 (; 3 ;) (type $FFF) (param $0 f64) (param $1 f64) (result f64)
|
||||
local.get $0
|
||||
local.get $1
|
||||
f64.add
|
||||
|
@ -10,7 +10,7 @@
|
||||
(memory $0 1)
|
||||
(data (i32.const 8) "\11\00\00\00f\00u\00n\00c\00t\00i\00o\00n\00-\00t\00y\00p\00e\00s\00.\00t\00s\00")
|
||||
(table $0 5 funcref)
|
||||
(elem (i32.const 0) $null $function-types/makeAdder<i32>~anonymous|1 $function-types/makeAdder<i64>~anonymous|2 $function-types/makeAdder<f64>~anonymous|3 $function-types/addI32)
|
||||
(elem (i32.const 0) $null $function-types/makeAdder<i32>~anonymous|0 $function-types/makeAdder<i64>~anonymous|0 $function-types/makeAdder<f64>~anonymous|0 $function-types/addI32)
|
||||
(global $function-types/i32Adder (mut i32) (i32.const 0))
|
||||
(global $~lib/argc (mut i32) (i32.const 0))
|
||||
(global $function-types/i64Adder (mut i32) (i32.const 0))
|
||||
@ -18,7 +18,7 @@
|
||||
(export "memory" (memory $0))
|
||||
(export "table" (table $0))
|
||||
(start $start)
|
||||
(func $function-types/makeAdder<i32>~anonymous|1 (; 1 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
|
||||
(func $function-types/makeAdder<i32>~anonymous|0 (; 1 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
|
||||
local.get $0
|
||||
local.get $1
|
||||
i32.add
|
||||
@ -26,7 +26,7 @@
|
||||
(func $function-types/makeAdder<i32> (; 2 ;) (type $i) (result i32)
|
||||
i32.const 1
|
||||
)
|
||||
(func $function-types/makeAdder<i64>~anonymous|2 (; 3 ;) (type $III) (param $0 i64) (param $1 i64) (result i64)
|
||||
(func $function-types/makeAdder<i64>~anonymous|0 (; 3 ;) (type $III) (param $0 i64) (param $1 i64) (result i64)
|
||||
local.get $0
|
||||
local.get $1
|
||||
i64.add
|
||||
@ -34,7 +34,7 @@
|
||||
(func $function-types/makeAdder<i64> (; 4 ;) (type $i) (result i32)
|
||||
i32.const 2
|
||||
)
|
||||
(func $function-types/makeAdder<f64>~anonymous|3 (; 5 ;) (type $FFF) (param $0 f64) (param $1 f64) (result f64)
|
||||
(func $function-types/makeAdder<f64>~anonymous|0 (; 5 ;) (type $FFF) (param $0 f64) (param $1 f64) (result f64)
|
||||
local.get $0
|
||||
local.get $1
|
||||
f64.add
|
||||
|
@ -4,7 +4,7 @@
|
||||
(type $ii (func (param i32) (result i32)))
|
||||
(memory $0 0)
|
||||
(table $0 2 funcref)
|
||||
(elem (i32.const 0) $null $getter-call/C#get:x~anonymous|1)
|
||||
(elem (i32.const 0) $null $getter-call/C#get:x~anonymous|0)
|
||||
(global $~lib/allocator/arena/startOffset (mut i32) (i32.const 0))
|
||||
(global $~lib/allocator/arena/offset (mut i32) (i32.const 0))
|
||||
(global $~lib/argc (mut i32) (i32.const 0))
|
||||
@ -74,7 +74,7 @@
|
||||
global.set $~lib/allocator/arena/offset
|
||||
local.get $1
|
||||
)
|
||||
(func $getter-call/C#get:x~anonymous|1 (; 1 ;) (type $i) (result i32)
|
||||
(func $getter-call/C#get:x~anonymous|0 (; 1 ;) (type $i) (result i32)
|
||||
i32.const 42
|
||||
)
|
||||
(func $getter-call/test (; 2 ;) (type $i) (result i32)
|
||||
|
@ -4,7 +4,7 @@
|
||||
(type $ii (func (param i32) (result i32)))
|
||||
(memory $0 0)
|
||||
(table $0 2 funcref)
|
||||
(elem (i32.const 0) $null $getter-call/C#get:x~anonymous|1)
|
||||
(elem (i32.const 0) $null $getter-call/C#get:x~anonymous|0)
|
||||
(global $~lib/allocator/arena/startOffset (mut i32) (i32.const 0))
|
||||
(global $~lib/allocator/arena/offset (mut i32) (i32.const 0))
|
||||
(global $~lib/argc (mut i32) (i32.const 0))
|
||||
@ -122,7 +122,7 @@
|
||||
end
|
||||
local.get $0
|
||||
)
|
||||
(func $getter-call/C#get:x~anonymous|1 (; 5 ;) (type $i) (result i32)
|
||||
(func $getter-call/C#get:x~anonymous|0 (; 5 ;) (type $i) (result i32)
|
||||
i32.const 42
|
||||
)
|
||||
(func $getter-call/C#get:x (; 6 ;) (type $ii) (param $0 i32) (result i32)
|
||||
|
@ -7,7 +7,7 @@
|
||||
(memory $0 1)
|
||||
(data (i32.const 8) "\0b\00\00\00i\00n\00l\00i\00n\00i\00n\00g\00.\00t\00s")
|
||||
(table $0 2 funcref)
|
||||
(elem (i32.const 0) $null $inlining/func_fe~anonymous|1)
|
||||
(elem (i32.const 0) $null $inlining/func_fe~anonymous|0)
|
||||
(global $~lib/argc (mut i32) (i32.const 0))
|
||||
(global $~lib/allocator/arena/startOffset (mut i32) (i32.const 0))
|
||||
(global $~lib/allocator/arena/offset (mut i32) (i32.const 0))
|
||||
@ -18,7 +18,7 @@
|
||||
(func $inlining/test (; 1 ;) (type $i) (result i32)
|
||||
i32.const 3
|
||||
)
|
||||
(func $inlining/func_fe~anonymous|1 (; 2 ;) (type $ii) (param $0 i32) (result i32)
|
||||
(func $inlining/func_fe~anonymous|0 (; 2 ;) (type $ii) (param $0 i32) (result i32)
|
||||
local.get $0
|
||||
)
|
||||
(func $inlining/test_funcs (; 3 ;) (type $_)
|
||||
|
@ -7,7 +7,7 @@
|
||||
(memory $0 1)
|
||||
(data (i32.const 8) "\0b\00\00\00i\00n\00l\00i\00n\00i\00n\00g\00.\00t\00s\00")
|
||||
(table $0 2 funcref)
|
||||
(elem (i32.const 0) $null $inlining/func_fe~anonymous|1)
|
||||
(elem (i32.const 0) $null $inlining/func_fe~anonymous|0)
|
||||
(global $inlining/constantGlobal i32 (i32.const 1))
|
||||
(global $~lib/argc (mut i32) (i32.const 0))
|
||||
(global $~lib/allocator/arena/startOffset (mut i32) (i32.const 0))
|
||||
@ -22,7 +22,7 @@
|
||||
i32.const 2
|
||||
i32.add
|
||||
)
|
||||
(func $inlining/func_fe~anonymous|1 (; 2 ;) (type $ii) (param $0 i32) (result i32)
|
||||
(func $inlining/func_fe~anonymous|0 (; 2 ;) (type $ii) (param $0 i32) (result i32)
|
||||
local.get $0
|
||||
)
|
||||
(func $inlining/test_funcs (; 3 ;) (type $_)
|
||||
|
@ -337,7 +337,7 @@
|
||||
(data (i32.const 7888) "\04\00\00\00\00\00\00\00\c8\1e")
|
||||
(data (i32.const 7904) "\d0\1e\00\00\01")
|
||||
(table $0 56 funcref)
|
||||
(elem (i32.const 0) $null $start:std/array~anonymous|1 $start:std/array~anonymous|2 $start:std/array~anonymous|3 $start:std/array~anonymous|4 $start:std/array~anonymous|3 $start:std/array~anonymous|6 $start:std/array~anonymous|7 $start:std/array~anonymous|8 $start:std/array~anonymous|9 $start:std/array~anonymous|10 $start:std/array~anonymous|11 $start:std/array~anonymous|12 $start:std/array~anonymous|13 $start:std/array~anonymous|14 $start:std/array~anonymous|15 $start:std/array~anonymous|16 $start:std/array~anonymous|17 $start:std/array~anonymous|18 $start:std/array~anonymous|17 $start:std/array~anonymous|20 $start:std/array~anonymous|21 $start:std/array~anonymous|22 $start:std/array~anonymous|23 $start:std/array~anonymous|24 $start:std/array~anonymous|25 $start:std/array~anonymous|26 $start:std/array~anonymous|27 $start:std/array~anonymous|28 $start:std/array~anonymous|29 $start:std/array~anonymous|30 $start:std/array~anonymous|30 $start:std/array~anonymous|32 $start:std/array~anonymous|33 $start:std/array~anonymous|34 $start:std/array~anonymous|30 $start:std/array~anonymous|36 $start:std/array~anonymous|30 $start:std/array~anonymous|30 $start:std/array~anonymous|32 $start:std/array~anonymous|33 $start:std/array~anonymous|34 $start:std/array~anonymous|30 $start:std/array~anonymous|36 $~lib/internal/sort/COMPARATOR<f32>~anonymous|44 $~lib/internal/sort/COMPARATOR<f64>~anonymous|45 $~lib/internal/sort/COMPARATOR<i32>~anonymous|46 $~lib/internal/sort/COMPARATOR<u32>~anonymous|47 $~lib/internal/sort/COMPARATOR<i32>~anonymous|46 $~lib/internal/sort/COMPARATOR<i32>~anonymous|46 $start:std/array~anonymous|50 $~lib/internal/sort/COMPARATOR<i32>~anonymous|46 $start:std/array~anonymous|50 $start:std/array~anonymous|53 $start:std/array~anonymous|54 $~lib/internal/sort/COMPARATOR<String>~anonymous|55)
|
||||
(elem (i32.const 0) $null $start:std/array~anonymous|0 $start:std/array~anonymous|1 $start:std/array~anonymous|2 $start:std/array~anonymous|3 $start:std/array~anonymous|2 $start:std/array~anonymous|5 $start:std/array~anonymous|6 $start:std/array~anonymous|7 $start:std/array~anonymous|8 $start:std/array~anonymous|9 $start:std/array~anonymous|10 $start:std/array~anonymous|11 $start:std/array~anonymous|12 $start:std/array~anonymous|13 $start:std/array~anonymous|14 $start:std/array~anonymous|15 $start:std/array~anonymous|16 $start:std/array~anonymous|17 $start:std/array~anonymous|16 $start:std/array~anonymous|19 $start:std/array~anonymous|20 $start:std/array~anonymous|21 $start:std/array~anonymous|22 $start:std/array~anonymous|23 $start:std/array~anonymous|24 $start:std/array~anonymous|25 $start:std/array~anonymous|26 $start:std/array~anonymous|27 $start:std/array~anonymous|28 $start:std/array~anonymous|29 $start:std/array~anonymous|29 $start:std/array~anonymous|31 $start:std/array~anonymous|32 $start:std/array~anonymous|33 $start:std/array~anonymous|29 $start:std/array~anonymous|35 $start:std/array~anonymous|29 $start:std/array~anonymous|29 $start:std/array~anonymous|31 $start:std/array~anonymous|32 $start:std/array~anonymous|33 $start:std/array~anonymous|29 $start:std/array~anonymous|35 $~lib/internal/sort/COMPARATOR<f32>~anonymous|0 $~lib/internal/sort/COMPARATOR<f64>~anonymous|0 $~lib/internal/sort/COMPARATOR<i32>~anonymous|0 $~lib/internal/sort/COMPARATOR<u32>~anonymous|0 $~lib/internal/sort/COMPARATOR<i32>~anonymous|0 $~lib/internal/sort/COMPARATOR<i32>~anonymous|0 $start:std/array~anonymous|44 $~lib/internal/sort/COMPARATOR<i32>~anonymous|0 $start:std/array~anonymous|44 $start:std/array~anonymous|47 $start:std/array~anonymous|48 $~lib/internal/sort/COMPARATOR<String>~anonymous|0)
|
||||
(global $~lib/allocator/arena/startOffset (mut i32) (i32.const 0))
|
||||
(global $~lib/allocator/arena/offset (mut i32) (i32.const 0))
|
||||
(global $std/array/arr (mut i32) (i32.const 0))
|
||||
@ -3068,7 +3068,7 @@
|
||||
local.get $2
|
||||
i32.store offset=8
|
||||
)
|
||||
(func $start:std/array~anonymous|1 (; 28 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
(func $start:std/array~anonymous|0 (; 28 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
local.get $0
|
||||
i32.eqz
|
||||
)
|
||||
@ -3121,17 +3121,17 @@
|
||||
end
|
||||
i32.const -1
|
||||
)
|
||||
(func $start:std/array~anonymous|2 (; 30 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
(func $start:std/array~anonymous|1 (; 30 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
local.get $0
|
||||
i32.const 1
|
||||
i32.eq
|
||||
)
|
||||
(func $start:std/array~anonymous|3 (; 31 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
(func $start:std/array~anonymous|2 (; 31 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
local.get $0
|
||||
i32.const 100
|
||||
i32.eq
|
||||
)
|
||||
(func $start:std/array~anonymous|4 (; 32 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
(func $start:std/array~anonymous|3 (; 32 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
local.get $2
|
||||
i32.const 100
|
||||
call $~lib/array/Array<i32>#push
|
||||
@ -3140,7 +3140,7 @@
|
||||
i32.const 100
|
||||
i32.eq
|
||||
)
|
||||
(func $start:std/array~anonymous|6 (; 33 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
(func $start:std/array~anonymous|5 (; 33 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
local.get $2
|
||||
call $~lib/array/Array<i32>#pop
|
||||
drop
|
||||
@ -3148,7 +3148,7 @@
|
||||
i32.const 100
|
||||
i32.eq
|
||||
)
|
||||
(func $start:std/array~anonymous|7 (; 34 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
(func $start:std/array~anonymous|6 (; 34 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
local.get $0
|
||||
i32.const 0
|
||||
i32.ge_s
|
||||
@ -3202,12 +3202,12 @@
|
||||
end
|
||||
i32.const 1
|
||||
)
|
||||
(func $start:std/array~anonymous|8 (; 36 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
(func $start:std/array~anonymous|7 (; 36 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
local.get $0
|
||||
i32.const 0
|
||||
i32.le_s
|
||||
)
|
||||
(func $start:std/array~anonymous|9 (; 37 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
(func $start:std/array~anonymous|8 (; 37 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
local.get $2
|
||||
i32.const 100
|
||||
call $~lib/array/Array<i32>#push
|
||||
@ -3216,12 +3216,12 @@
|
||||
i32.const 10
|
||||
i32.lt_s
|
||||
)
|
||||
(func $start:std/array~anonymous|10 (; 38 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
(func $start:std/array~anonymous|9 (; 38 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
local.get $0
|
||||
i32.const 10
|
||||
i32.lt_s
|
||||
)
|
||||
(func $start:std/array~anonymous|11 (; 39 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
(func $start:std/array~anonymous|10 (; 39 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
local.get $2
|
||||
call $~lib/array/Array<i32>#pop
|
||||
drop
|
||||
@ -3229,7 +3229,7 @@
|
||||
i32.const 3
|
||||
i32.lt_s
|
||||
)
|
||||
(func $start:std/array~anonymous|12 (; 40 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
(func $start:std/array~anonymous|11 (; 40 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
local.get $0
|
||||
i32.const 3
|
||||
i32.ge_s
|
||||
@ -3283,12 +3283,12 @@
|
||||
end
|
||||
i32.const 0
|
||||
)
|
||||
(func $start:std/array~anonymous|13 (; 42 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
(func $start:std/array~anonymous|12 (; 42 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
local.get $0
|
||||
i32.const -1
|
||||
i32.le_s
|
||||
)
|
||||
(func $start:std/array~anonymous|14 (; 43 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
(func $start:std/array~anonymous|13 (; 43 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
local.get $2
|
||||
i32.const 100
|
||||
call $~lib/array/Array<i32>#push
|
||||
@ -3297,12 +3297,12 @@
|
||||
i32.const 10
|
||||
i32.gt_s
|
||||
)
|
||||
(func $start:std/array~anonymous|15 (; 44 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
(func $start:std/array~anonymous|14 (; 44 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
local.get $0
|
||||
i32.const 10
|
||||
i32.gt_s
|
||||
)
|
||||
(func $start:std/array~anonymous|16 (; 45 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
(func $start:std/array~anonymous|15 (; 45 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
local.get $2
|
||||
call $~lib/array/Array<i32>#pop
|
||||
drop
|
||||
@ -3310,7 +3310,7 @@
|
||||
i32.const 3
|
||||
i32.gt_s
|
||||
)
|
||||
(func $start:std/array~anonymous|17 (; 46 ;) (type $iii_) (param $0 i32) (param $1 i32) (param $2 i32)
|
||||
(func $start:std/array~anonymous|16 (; 46 ;) (type $iii_) (param $0 i32) (param $1 i32) (param $2 i32)
|
||||
global.get $std/array/i
|
||||
local.get $0
|
||||
i32.add
|
||||
@ -3360,7 +3360,7 @@
|
||||
unreachable
|
||||
end
|
||||
)
|
||||
(func $start:std/array~anonymous|18 (; 48 ;) (type $iii_) (param $0 i32) (param $1 i32) (param $2 i32)
|
||||
(func $start:std/array~anonymous|17 (; 48 ;) (type $iii_) (param $0 i32) (param $1 i32) (param $2 i32)
|
||||
local.get $2
|
||||
i32.const 100
|
||||
call $~lib/array/Array<i32>#push
|
||||
@ -3370,7 +3370,7 @@
|
||||
i32.add
|
||||
global.set $std/array/i
|
||||
)
|
||||
(func $start:std/array~anonymous|20 (; 49 ;) (type $iii_) (param $0 i32) (param $1 i32) (param $2 i32)
|
||||
(func $start:std/array~anonymous|19 (; 49 ;) (type $iii_) (param $0 i32) (param $1 i32) (param $2 i32)
|
||||
local.get $2
|
||||
call $~lib/array/Array<i32>#pop
|
||||
drop
|
||||
@ -3379,7 +3379,7 @@
|
||||
i32.add
|
||||
global.set $std/array/i
|
||||
)
|
||||
(func $start:std/array~anonymous|21 (; 50 ;) (type $iii_) (param $0 i32) (param $1 i32) (param $2 i32)
|
||||
(func $start:std/array~anonymous|20 (; 50 ;) (type $iii_) (param $0 i32) (param $1 i32) (param $2 i32)
|
||||
(local $3 i32)
|
||||
local.get $1
|
||||
i32.eqz
|
||||
@ -3478,7 +3478,7 @@
|
||||
end
|
||||
end
|
||||
)
|
||||
(func $start:std/array~anonymous|22 (; 51 ;) (type $iiif) (param $0 i32) (param $1 i32) (param $2 i32) (result f32)
|
||||
(func $start:std/array~anonymous|21 (; 51 ;) (type $iiif) (param $0 i32) (param $1 i32) (param $2 i32) (result f32)
|
||||
local.get $0
|
||||
f32.convert_i32_s
|
||||
)
|
||||
@ -3535,7 +3535,7 @@
|
||||
end
|
||||
local.get $4
|
||||
)
|
||||
(func $start:std/array~anonymous|23 (; 53 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
(func $start:std/array~anonymous|22 (; 53 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
local.get $2
|
||||
i32.const 100
|
||||
call $~lib/array/Array<i32>#push
|
||||
@ -3601,14 +3601,14 @@
|
||||
end
|
||||
local.get $5
|
||||
)
|
||||
(func $start:std/array~anonymous|24 (; 55 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
(func $start:std/array~anonymous|23 (; 55 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
global.get $std/array/i
|
||||
local.get $0
|
||||
i32.add
|
||||
global.set $std/array/i
|
||||
local.get $0
|
||||
)
|
||||
(func $start:std/array~anonymous|25 (; 56 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
(func $start:std/array~anonymous|24 (; 56 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
local.get $2
|
||||
call $~lib/array/Array<i32>#pop
|
||||
drop
|
||||
@ -3618,7 +3618,7 @@
|
||||
global.set $std/array/i
|
||||
local.get $0
|
||||
)
|
||||
(func $start:std/array~anonymous|26 (; 57 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
(func $start:std/array~anonymous|25 (; 57 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
local.get $0
|
||||
i32.const 2
|
||||
i32.ge_s
|
||||
@ -3678,7 +3678,7 @@
|
||||
end
|
||||
local.get $4
|
||||
)
|
||||
(func $start:std/array~anonymous|27 (; 59 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
(func $start:std/array~anonymous|26 (; 59 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
local.get $2
|
||||
i32.const 100
|
||||
call $~lib/array/Array<i32>#push
|
||||
@ -3691,7 +3691,7 @@
|
||||
i32.const 2
|
||||
i32.ge_s
|
||||
)
|
||||
(func $start:std/array~anonymous|28 (; 60 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
(func $start:std/array~anonymous|27 (; 60 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
global.get $std/array/i
|
||||
local.get $0
|
||||
i32.add
|
||||
@ -3700,7 +3700,7 @@
|
||||
i32.const 2
|
||||
i32.ge_s
|
||||
)
|
||||
(func $start:std/array~anonymous|29 (; 61 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
(func $start:std/array~anonymous|28 (; 61 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
local.get $2
|
||||
call $~lib/array/Array<i32>#pop
|
||||
drop
|
||||
@ -3712,7 +3712,7 @@
|
||||
i32.const 2
|
||||
i32.ge_s
|
||||
)
|
||||
(func $start:std/array~anonymous|30 (; 62 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
|
||||
(func $start:std/array~anonymous|29 (; 62 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
|
||||
local.get $0
|
||||
local.get $1
|
||||
i32.add
|
||||
@ -3765,7 +3765,7 @@
|
||||
end
|
||||
local.get $3
|
||||
)
|
||||
(func $start:std/array~anonymous|32 (; 64 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
|
||||
(func $start:std/array~anonymous|31 (; 64 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
|
||||
local.get $0
|
||||
local.get $1
|
||||
i32.const 2
|
||||
@ -3773,7 +3773,7 @@
|
||||
local.get $0
|
||||
select
|
||||
)
|
||||
(func $start:std/array~anonymous|33 (; 65 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
|
||||
(func $start:std/array~anonymous|32 (; 65 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
|
||||
local.get $0
|
||||
local.get $1
|
||||
i32.const 100
|
||||
@ -3781,7 +3781,7 @@
|
||||
local.get $0
|
||||
select
|
||||
)
|
||||
(func $start:std/array~anonymous|34 (; 66 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
|
||||
(func $start:std/array~anonymous|33 (; 66 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
|
||||
local.get $3
|
||||
i32.const 1
|
||||
call $~lib/array/Array<i32>#push
|
||||
@ -3790,7 +3790,7 @@
|
||||
local.get $1
|
||||
i32.add
|
||||
)
|
||||
(func $start:std/array~anonymous|36 (; 67 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
|
||||
(func $start:std/array~anonymous|35 (; 67 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
|
||||
local.get $3
|
||||
call $~lib/array/Array<i32>#pop
|
||||
drop
|
||||
@ -4351,7 +4351,7 @@
|
||||
end
|
||||
local.get $0
|
||||
)
|
||||
(func $~lib/internal/sort/COMPARATOR<f32>~anonymous|44 (; 74 ;) (type $ffi) (param $0 f32) (param $1 f32) (result i32)
|
||||
(func $~lib/internal/sort/COMPARATOR<f32>~anonymous|0 (; 74 ;) (type $ffi) (param $0 f32) (param $1 f32) (result i32)
|
||||
(local $2 i32)
|
||||
(local $3 i32)
|
||||
local.get $0
|
||||
@ -4924,7 +4924,7 @@
|
||||
end
|
||||
local.get $0
|
||||
)
|
||||
(func $~lib/internal/sort/COMPARATOR<f64>~anonymous|45 (; 79 ;) (type $FFi) (param $0 f64) (param $1 f64) (result i32)
|
||||
(func $~lib/internal/sort/COMPARATOR<f64>~anonymous|0 (; 79 ;) (type $FFi) (param $0 f64) (param $1 f64) (result i32)
|
||||
(local $2 i64)
|
||||
(local $3 i64)
|
||||
local.get $0
|
||||
@ -5496,12 +5496,12 @@
|
||||
end
|
||||
local.get $0
|
||||
)
|
||||
(func $~lib/internal/sort/COMPARATOR<i32>~anonymous|46 (; 84 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
|
||||
(func $~lib/internal/sort/COMPARATOR<i32>~anonymous|0 (; 84 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
|
||||
local.get $0
|
||||
local.get $1
|
||||
i32.sub
|
||||
)
|
||||
(func $~lib/internal/sort/COMPARATOR<u32>~anonymous|47 (; 85 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
|
||||
(func $~lib/internal/sort/COMPARATOR<u32>~anonymous|0 (; 85 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
|
||||
local.get $0
|
||||
local.get $1
|
||||
i32.gt_u
|
||||
@ -5715,7 +5715,7 @@
|
||||
i32.const 48
|
||||
call $std/array/assertSorted<i32>
|
||||
)
|
||||
(func $start:std/array~anonymous|50 (; 92 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
|
||||
(func $start:std/array~anonymous|44 (; 92 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
|
||||
local.get $1
|
||||
local.get $0
|
||||
i32.sub
|
||||
@ -5773,7 +5773,7 @@
|
||||
end
|
||||
local.get $1
|
||||
)
|
||||
(func $start:std/array~anonymous|53 (; 94 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
|
||||
(func $start:std/array~anonymous|47 (; 94 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
|
||||
i32.const 0
|
||||
local.get $0
|
||||
i32.load
|
||||
@ -5924,7 +5924,7 @@
|
||||
end
|
||||
local.get $0
|
||||
)
|
||||
(func $start:std/array~anonymous|54 (; 98 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
|
||||
(func $start:std/array~anonymous|48 (; 98 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
|
||||
local.get $0
|
||||
i32.load
|
||||
local.get $1
|
||||
@ -5964,7 +5964,7 @@
|
||||
end
|
||||
local.get $3
|
||||
)
|
||||
(func $~lib/internal/sort/COMPARATOR<String>~anonymous|55 (; 100 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
|
||||
(func $~lib/internal/sort/COMPARATOR<String>~anonymous|0 (; 100 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
|
||||
(local $2 i32)
|
||||
(local $3 i32)
|
||||
(local $4 i32)
|
||||
|
@ -332,7 +332,7 @@
|
||||
(data (i32.const 7888) "\04\00\00\00\00\00\00\00\c8\1e\00\00\00\00\00\00")
|
||||
(data (i32.const 7904) "\d0\1e\00\00\01\00\00\00")
|
||||
(table $0 56 funcref)
|
||||
(elem (i32.const 0) $null $start:std/array~anonymous|1 $start:std/array~anonymous|2 $start:std/array~anonymous|3 $start:std/array~anonymous|4 $start:std/array~anonymous|5 $start:std/array~anonymous|6 $start:std/array~anonymous|7 $start:std/array~anonymous|8 $start:std/array~anonymous|9 $start:std/array~anonymous|10 $start:std/array~anonymous|11 $start:std/array~anonymous|12 $start:std/array~anonymous|13 $start:std/array~anonymous|14 $start:std/array~anonymous|15 $start:std/array~anonymous|16 $start:std/array~anonymous|17 $start:std/array~anonymous|18 $start:std/array~anonymous|19 $start:std/array~anonymous|20 $start:std/array~anonymous|21 $start:std/array~anonymous|22 $start:std/array~anonymous|23 $start:std/array~anonymous|24 $start:std/array~anonymous|25 $start:std/array~anonymous|26 $start:std/array~anonymous|27 $start:std/array~anonymous|28 $start:std/array~anonymous|29 $start:std/array~anonymous|30 $start:std/array~anonymous|31 $start:std/array~anonymous|32 $start:std/array~anonymous|33 $start:std/array~anonymous|34 $start:std/array~anonymous|35 $start:std/array~anonymous|36 $start:std/array~anonymous|37 $start:std/array~anonymous|38 $start:std/array~anonymous|39 $start:std/array~anonymous|40 $start:std/array~anonymous|41 $start:std/array~anonymous|42 $start:std/array~anonymous|43 $~lib/internal/sort/COMPARATOR<f32>~anonymous|44 $~lib/internal/sort/COMPARATOR<f64>~anonymous|45 $~lib/internal/sort/COMPARATOR<i32>~anonymous|46 $~lib/internal/sort/COMPARATOR<u32>~anonymous|47 $~lib/internal/sort/COMPARATOR<i32>~anonymous|48 $start:std/array~anonymous|49 $start:std/array~anonymous|50 $start:std/array~anonymous|51 $start:std/array~anonymous|52 $start:std/array~anonymous|53 $start:std/array~anonymous|54 $~lib/internal/sort/COMPARATOR<String>~anonymous|55)
|
||||
(elem (i32.const 0) $null $start:std/array~anonymous|0 $start:std/array~anonymous|1 $start:std/array~anonymous|2 $start:std/array~anonymous|3 $start:std/array~anonymous|4 $start:std/array~anonymous|5 $start:std/array~anonymous|6 $start:std/array~anonymous|7 $start:std/array~anonymous|8 $start:std/array~anonymous|9 $start:std/array~anonymous|10 $start:std/array~anonymous|11 $start:std/array~anonymous|12 $start:std/array~anonymous|13 $start:std/array~anonymous|14 $start:std/array~anonymous|15 $start:std/array~anonymous|16 $start:std/array~anonymous|17 $start:std/array~anonymous|18 $start:std/array~anonymous|19 $start:std/array~anonymous|20 $start:std/array~anonymous|21 $start:std/array~anonymous|22 $start:std/array~anonymous|23 $start:std/array~anonymous|24 $start:std/array~anonymous|25 $start:std/array~anonymous|26 $start:std/array~anonymous|27 $start:std/array~anonymous|28 $start:std/array~anonymous|29 $start:std/array~anonymous|30 $start:std/array~anonymous|31 $start:std/array~anonymous|32 $start:std/array~anonymous|33 $start:std/array~anonymous|34 $start:std/array~anonymous|35 $start:std/array~anonymous|36 $start:std/array~anonymous|37 $start:std/array~anonymous|38 $start:std/array~anonymous|39 $start:std/array~anonymous|40 $start:std/array~anonymous|41 $start:std/array~anonymous|42 $~lib/internal/sort/COMPARATOR<f32>~anonymous|0 $~lib/internal/sort/COMPARATOR<f64>~anonymous|0 $~lib/internal/sort/COMPARATOR<i32>~anonymous|0 $~lib/internal/sort/COMPARATOR<u32>~anonymous|0 $~lib/internal/sort/COMPARATOR<i32>~anonymous|1 $start:std/array~anonymous|43 $start:std/array~anonymous|44 $start:std/array~anonymous|45 $start:std/array~anonymous|46 $start:std/array~anonymous|47 $start:std/array~anonymous|48 $~lib/internal/sort/COMPARATOR<String>~anonymous|0)
|
||||
(global $~lib/allocator/arena/startOffset (mut i32) (i32.const 0))
|
||||
(global $~lib/allocator/arena/offset (mut i32) (i32.const 0))
|
||||
(global $std/array/arr (mut i32) (i32.const 0))
|
||||
@ -4116,7 +4116,7 @@
|
||||
i32.store offset=8
|
||||
end
|
||||
)
|
||||
(func $start:std/array~anonymous|1 (; 45 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
(func $start:std/array~anonymous|0 (; 45 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
local.get $0
|
||||
i32.const 0
|
||||
i32.eq
|
||||
@ -4191,17 +4191,17 @@
|
||||
end
|
||||
i32.const -1
|
||||
)
|
||||
(func $start:std/array~anonymous|2 (; 47 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
(func $start:std/array~anonymous|1 (; 47 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
local.get $0
|
||||
i32.const 1
|
||||
i32.eq
|
||||
)
|
||||
(func $start:std/array~anonymous|3 (; 48 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
(func $start:std/array~anonymous|2 (; 48 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
local.get $0
|
||||
i32.const 100
|
||||
i32.eq
|
||||
)
|
||||
(func $start:std/array~anonymous|4 (; 49 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
(func $start:std/array~anonymous|3 (; 49 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
local.get $2
|
||||
i32.const 100
|
||||
call $~lib/array/Array<i32>#push
|
||||
@ -4210,12 +4210,12 @@
|
||||
i32.const 100
|
||||
i32.eq
|
||||
)
|
||||
(func $start:std/array~anonymous|5 (; 50 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
(func $start:std/array~anonymous|4 (; 50 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
local.get $0
|
||||
i32.const 100
|
||||
i32.eq
|
||||
)
|
||||
(func $start:std/array~anonymous|6 (; 51 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
(func $start:std/array~anonymous|5 (; 51 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
local.get $2
|
||||
call $~lib/array/Array<i32>#pop
|
||||
drop
|
||||
@ -4223,7 +4223,7 @@
|
||||
i32.const 100
|
||||
i32.eq
|
||||
)
|
||||
(func $start:std/array~anonymous|7 (; 52 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
(func $start:std/array~anonymous|6 (; 52 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
local.get $0
|
||||
i32.const 0
|
||||
i32.ge_s
|
||||
@ -4299,12 +4299,12 @@
|
||||
end
|
||||
i32.const 1
|
||||
)
|
||||
(func $start:std/array~anonymous|8 (; 54 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
(func $start:std/array~anonymous|7 (; 54 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
local.get $0
|
||||
i32.const 0
|
||||
i32.le_s
|
||||
)
|
||||
(func $start:std/array~anonymous|9 (; 55 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
(func $start:std/array~anonymous|8 (; 55 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
local.get $2
|
||||
i32.const 100
|
||||
call $~lib/array/Array<i32>#push
|
||||
@ -4313,12 +4313,12 @@
|
||||
i32.const 10
|
||||
i32.lt_s
|
||||
)
|
||||
(func $start:std/array~anonymous|10 (; 56 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
(func $start:std/array~anonymous|9 (; 56 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
local.get $0
|
||||
i32.const 10
|
||||
i32.lt_s
|
||||
)
|
||||
(func $start:std/array~anonymous|11 (; 57 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
(func $start:std/array~anonymous|10 (; 57 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
local.get $2
|
||||
call $~lib/array/Array<i32>#pop
|
||||
drop
|
||||
@ -4326,7 +4326,7 @@
|
||||
i32.const 3
|
||||
i32.lt_s
|
||||
)
|
||||
(func $start:std/array~anonymous|12 (; 58 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
(func $start:std/array~anonymous|11 (; 58 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
local.get $0
|
||||
i32.const 3
|
||||
i32.ge_s
|
||||
@ -4401,12 +4401,12 @@
|
||||
end
|
||||
i32.const 0
|
||||
)
|
||||
(func $start:std/array~anonymous|13 (; 60 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
(func $start:std/array~anonymous|12 (; 60 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
local.get $0
|
||||
i32.const -1
|
||||
i32.le_s
|
||||
)
|
||||
(func $start:std/array~anonymous|14 (; 61 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
(func $start:std/array~anonymous|13 (; 61 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
local.get $2
|
||||
i32.const 100
|
||||
call $~lib/array/Array<i32>#push
|
||||
@ -4415,12 +4415,12 @@
|
||||
i32.const 10
|
||||
i32.gt_s
|
||||
)
|
||||
(func $start:std/array~anonymous|15 (; 62 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
(func $start:std/array~anonymous|14 (; 62 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
local.get $0
|
||||
i32.const 10
|
||||
i32.gt_s
|
||||
)
|
||||
(func $start:std/array~anonymous|16 (; 63 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
(func $start:std/array~anonymous|15 (; 63 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
local.get $2
|
||||
call $~lib/array/Array<i32>#pop
|
||||
drop
|
||||
@ -4428,7 +4428,7 @@
|
||||
i32.const 3
|
||||
i32.gt_s
|
||||
)
|
||||
(func $start:std/array~anonymous|17 (; 64 ;) (type $iii_) (param $0 i32) (param $1 i32) (param $2 i32)
|
||||
(func $start:std/array~anonymous|16 (; 64 ;) (type $iii_) (param $0 i32) (param $1 i32) (param $2 i32)
|
||||
global.get $std/array/i
|
||||
local.get $0
|
||||
i32.add
|
||||
@ -4497,7 +4497,7 @@
|
||||
unreachable
|
||||
end
|
||||
)
|
||||
(func $start:std/array~anonymous|18 (; 66 ;) (type $iii_) (param $0 i32) (param $1 i32) (param $2 i32)
|
||||
(func $start:std/array~anonymous|17 (; 66 ;) (type $iii_) (param $0 i32) (param $1 i32) (param $2 i32)
|
||||
local.get $2
|
||||
i32.const 100
|
||||
call $~lib/array/Array<i32>#push
|
||||
@ -4507,13 +4507,13 @@
|
||||
i32.add
|
||||
global.set $std/array/i
|
||||
)
|
||||
(func $start:std/array~anonymous|19 (; 67 ;) (type $iii_) (param $0 i32) (param $1 i32) (param $2 i32)
|
||||
(func $start:std/array~anonymous|18 (; 67 ;) (type $iii_) (param $0 i32) (param $1 i32) (param $2 i32)
|
||||
global.get $std/array/i
|
||||
local.get $0
|
||||
i32.add
|
||||
global.set $std/array/i
|
||||
)
|
||||
(func $start:std/array~anonymous|20 (; 68 ;) (type $iii_) (param $0 i32) (param $1 i32) (param $2 i32)
|
||||
(func $start:std/array~anonymous|19 (; 68 ;) (type $iii_) (param $0 i32) (param $1 i32) (param $2 i32)
|
||||
local.get $2
|
||||
call $~lib/array/Array<i32>#pop
|
||||
drop
|
||||
@ -4522,7 +4522,7 @@
|
||||
i32.add
|
||||
global.set $std/array/i
|
||||
)
|
||||
(func $start:std/array~anonymous|21 (; 69 ;) (type $iii_) (param $0 i32) (param $1 i32) (param $2 i32)
|
||||
(func $start:std/array~anonymous|20 (; 69 ;) (type $iii_) (param $0 i32) (param $1 i32) (param $2 i32)
|
||||
(local $3 i32)
|
||||
local.get $1
|
||||
i32.const 0
|
||||
@ -4637,7 +4637,7 @@
|
||||
end
|
||||
end
|
||||
)
|
||||
(func $start:std/array~anonymous|22 (; 70 ;) (type $iiif) (param $0 i32) (param $1 i32) (param $2 i32) (result f32)
|
||||
(func $start:std/array~anonymous|21 (; 70 ;) (type $iiif) (param $0 i32) (param $1 i32) (param $2 i32) (result f32)
|
||||
local.get $0
|
||||
f32.convert_i32_s
|
||||
)
|
||||
@ -4827,7 +4827,7 @@
|
||||
unreachable
|
||||
end
|
||||
)
|
||||
(func $start:std/array~anonymous|23 (; 74 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
(func $start:std/array~anonymous|22 (; 74 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
local.get $2
|
||||
i32.const 100
|
||||
call $~lib/array/Array<i32>#push
|
||||
@ -4929,14 +4929,14 @@
|
||||
end
|
||||
local.get $3
|
||||
)
|
||||
(func $start:std/array~anonymous|24 (; 76 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
(func $start:std/array~anonymous|23 (; 76 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
global.get $std/array/i
|
||||
local.get $0
|
||||
i32.add
|
||||
global.set $std/array/i
|
||||
local.get $0
|
||||
)
|
||||
(func $start:std/array~anonymous|25 (; 77 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
(func $start:std/array~anonymous|24 (; 77 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
local.get $2
|
||||
call $~lib/array/Array<i32>#pop
|
||||
drop
|
||||
@ -4946,7 +4946,7 @@
|
||||
global.set $std/array/i
|
||||
local.get $0
|
||||
)
|
||||
(func $start:std/array~anonymous|26 (; 78 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
(func $start:std/array~anonymous|25 (; 78 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
local.get $0
|
||||
i32.const 2
|
||||
i32.ge_s
|
||||
@ -5032,7 +5032,7 @@
|
||||
end
|
||||
local.get $2
|
||||
)
|
||||
(func $start:std/array~anonymous|27 (; 80 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
(func $start:std/array~anonymous|26 (; 80 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
local.get $2
|
||||
i32.const 100
|
||||
call $~lib/array/Array<i32>#push
|
||||
@ -5045,7 +5045,7 @@
|
||||
i32.const 2
|
||||
i32.ge_s
|
||||
)
|
||||
(func $start:std/array~anonymous|28 (; 81 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
(func $start:std/array~anonymous|27 (; 81 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
global.get $std/array/i
|
||||
local.get $0
|
||||
i32.add
|
||||
@ -5054,7 +5054,7 @@
|
||||
i32.const 2
|
||||
i32.ge_s
|
||||
)
|
||||
(func $start:std/array~anonymous|29 (; 82 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
(func $start:std/array~anonymous|28 (; 82 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
|
||||
local.get $2
|
||||
call $~lib/array/Array<i32>#pop
|
||||
drop
|
||||
@ -5066,7 +5066,7 @@
|
||||
i32.const 2
|
||||
i32.ge_s
|
||||
)
|
||||
(func $start:std/array~anonymous|30 (; 83 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
|
||||
(func $start:std/array~anonymous|29 (; 83 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
|
||||
local.get $0
|
||||
local.get $1
|
||||
i32.add
|
||||
@ -5140,12 +5140,12 @@
|
||||
end
|
||||
local.get $3
|
||||
)
|
||||
(func $start:std/array~anonymous|31 (; 85 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
|
||||
(func $start:std/array~anonymous|30 (; 85 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
|
||||
local.get $0
|
||||
local.get $1
|
||||
i32.add
|
||||
)
|
||||
(func $start:std/array~anonymous|32 (; 86 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
|
||||
(func $start:std/array~anonymous|31 (; 86 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
|
||||
local.get $0
|
||||
i32.const 0
|
||||
i32.ne
|
||||
@ -5226,7 +5226,7 @@
|
||||
end
|
||||
local.get $3
|
||||
)
|
||||
(func $start:std/array~anonymous|33 (; 88 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
|
||||
(func $start:std/array~anonymous|32 (; 88 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
|
||||
local.get $0
|
||||
i32.const 0
|
||||
i32.ne
|
||||
@ -5238,7 +5238,7 @@
|
||||
i32.gt_s
|
||||
end
|
||||
)
|
||||
(func $start:std/array~anonymous|34 (; 89 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
|
||||
(func $start:std/array~anonymous|33 (; 89 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
|
||||
local.get $3
|
||||
i32.const 1
|
||||
call $~lib/array/Array<i32>#push
|
||||
@ -5247,12 +5247,12 @@
|
||||
local.get $1
|
||||
i32.add
|
||||
)
|
||||
(func $start:std/array~anonymous|35 (; 90 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
|
||||
(func $start:std/array~anonymous|34 (; 90 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
|
||||
local.get $0
|
||||
local.get $1
|
||||
i32.add
|
||||
)
|
||||
(func $start:std/array~anonymous|36 (; 91 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
|
||||
(func $start:std/array~anonymous|35 (; 91 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
|
||||
local.get $3
|
||||
call $~lib/array/Array<i32>#pop
|
||||
drop
|
||||
@ -5260,7 +5260,7 @@
|
||||
local.get $1
|
||||
i32.add
|
||||
)
|
||||
(func $start:std/array~anonymous|37 (; 92 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
|
||||
(func $start:std/array~anonymous|36 (; 92 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
|
||||
local.get $0
|
||||
local.get $1
|
||||
i32.add
|
||||
@ -5323,12 +5323,12 @@
|
||||
end
|
||||
local.get $3
|
||||
)
|
||||
(func $start:std/array~anonymous|38 (; 94 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
|
||||
(func $start:std/array~anonymous|37 (; 94 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
|
||||
local.get $0
|
||||
local.get $1
|
||||
i32.add
|
||||
)
|
||||
(func $start:std/array~anonymous|39 (; 95 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
|
||||
(func $start:std/array~anonymous|38 (; 95 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
|
||||
local.get $0
|
||||
i32.const 0
|
||||
i32.ne
|
||||
@ -5398,7 +5398,7 @@
|
||||
end
|
||||
local.get $3
|
||||
)
|
||||
(func $start:std/array~anonymous|40 (; 97 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
|
||||
(func $start:std/array~anonymous|39 (; 97 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
|
||||
local.get $0
|
||||
i32.const 0
|
||||
i32.ne
|
||||
@ -5410,7 +5410,7 @@
|
||||
i32.gt_s
|
||||
end
|
||||
)
|
||||
(func $start:std/array~anonymous|41 (; 98 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
|
||||
(func $start:std/array~anonymous|40 (; 98 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
|
||||
local.get $3
|
||||
i32.const 1
|
||||
call $~lib/array/Array<i32>#push
|
||||
@ -5419,12 +5419,12 @@
|
||||
local.get $1
|
||||
i32.add
|
||||
)
|
||||
(func $start:std/array~anonymous|42 (; 99 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
|
||||
(func $start:std/array~anonymous|41 (; 99 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
|
||||
local.get $0
|
||||
local.get $1
|
||||
i32.add
|
||||
)
|
||||
(func $start:std/array~anonymous|43 (; 100 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
|
||||
(func $start:std/array~anonymous|42 (; 100 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
|
||||
local.get $3
|
||||
call $~lib/array/Array<i32>#pop
|
||||
drop
|
||||
@ -6348,7 +6348,7 @@
|
||||
end
|
||||
local.get $0
|
||||
)
|
||||
(func $~lib/internal/sort/COMPARATOR<f32>~anonymous|44 (; 107 ;) (type $ffi) (param $0 f32) (param $1 f32) (result i32)
|
||||
(func $~lib/internal/sort/COMPARATOR<f32>~anonymous|0 (; 107 ;) (type $ffi) (param $0 f32) (param $1 f32) (result i32)
|
||||
(local $2 i32)
|
||||
(local $3 i32)
|
||||
local.get $0
|
||||
@ -7307,7 +7307,7 @@
|
||||
end
|
||||
local.get $0
|
||||
)
|
||||
(func $~lib/internal/sort/COMPARATOR<f64>~anonymous|45 (; 114 ;) (type $FFi) (param $0 f64) (param $1 f64) (result i32)
|
||||
(func $~lib/internal/sort/COMPARATOR<f64>~anonymous|0 (; 114 ;) (type $FFi) (param $0 f64) (param $1 f64) (result i32)
|
||||
(local $2 i64)
|
||||
(local $3 i64)
|
||||
local.get $0
|
||||
@ -8298,7 +8298,7 @@
|
||||
end
|
||||
local.get $0
|
||||
)
|
||||
(func $~lib/internal/sort/COMPARATOR<i32>~anonymous|46 (; 122 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
|
||||
(func $~lib/internal/sort/COMPARATOR<i32>~anonymous|0 (; 122 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
|
||||
local.get $0
|
||||
local.get $1
|
||||
i32.sub
|
||||
@ -9144,7 +9144,7 @@
|
||||
end
|
||||
local.get $0
|
||||
)
|
||||
(func $~lib/internal/sort/COMPARATOR<u32>~anonymous|47 (; 127 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
|
||||
(func $~lib/internal/sort/COMPARATOR<u32>~anonymous|0 (; 127 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
|
||||
local.get $0
|
||||
local.get $1
|
||||
i32.gt_u
|
||||
@ -9321,7 +9321,7 @@
|
||||
end
|
||||
local.get $1
|
||||
)
|
||||
(func $~lib/internal/sort/COMPARATOR<i32>~anonymous|48 (; 132 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
|
||||
(func $~lib/internal/sort/COMPARATOR<i32>~anonymous|1 (; 132 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
|
||||
local.get $0
|
||||
local.get $1
|
||||
i32.sub
|
||||
@ -9402,22 +9402,22 @@
|
||||
end
|
||||
call $std/array/assertSorted<i32>
|
||||
)
|
||||
(func $start:std/array~anonymous|49 (; 136 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
|
||||
(func $start:std/array~anonymous|43 (; 136 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
|
||||
local.get $0
|
||||
local.get $1
|
||||
i32.sub
|
||||
)
|
||||
(func $start:std/array~anonymous|50 (; 137 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
|
||||
(func $start:std/array~anonymous|44 (; 137 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
|
||||
local.get $1
|
||||
local.get $0
|
||||
i32.sub
|
||||
)
|
||||
(func $start:std/array~anonymous|51 (; 138 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
|
||||
(func $start:std/array~anonymous|45 (; 138 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
|
||||
local.get $0
|
||||
local.get $1
|
||||
i32.sub
|
||||
)
|
||||
(func $start:std/array~anonymous|52 (; 139 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
|
||||
(func $start:std/array~anonymous|46 (; 139 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
|
||||
local.get $1
|
||||
local.get $0
|
||||
i32.sub
|
||||
@ -9639,7 +9639,7 @@
|
||||
end
|
||||
local.get $1
|
||||
)
|
||||
(func $start:std/array~anonymous|53 (; 144 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
|
||||
(func $start:std/array~anonymous|47 (; 144 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
|
||||
local.get $0
|
||||
i32.const 0
|
||||
call $~lib/array/Array<i32>#__get
|
||||
@ -10186,7 +10186,7 @@
|
||||
end
|
||||
local.get $1
|
||||
)
|
||||
(func $start:std/array~anonymous|54 (; 153 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
|
||||
(func $start:std/array~anonymous|48 (; 153 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
|
||||
local.get $0
|
||||
i32.load
|
||||
local.get $1
|
||||
@ -11010,7 +11010,7 @@
|
||||
end
|
||||
local.get $5
|
||||
)
|
||||
(func $~lib/internal/sort/COMPARATOR<String>~anonymous|55 (; 165 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
|
||||
(func $~lib/internal/sort/COMPARATOR<String>~anonymous|0 (; 165 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
|
||||
(local $2 i32)
|
||||
(local $3 i32)
|
||||
(local $4 i32)
|
||||
|
@ -6,7 +6,7 @@
|
||||
(memory $0 1)
|
||||
(data (i32.const 8) "\15\00\00\00s\00t\00d\00/\00g\00c\00-\00i\00n\00t\00e\00g\00r\00a\00t\00i\00o\00n\00.\00t\00s")
|
||||
(table $0 2 funcref)
|
||||
(elem (i32.const 0) $null $start:std/gc-integration~anonymous|1)
|
||||
(elem (i32.const 0) $null $start:std/gc-integration~anonymous|0)
|
||||
(global $std/gc-integration/B.d (mut i32) (i32.const 16))
|
||||
(global $std/gc-integration/a_ref (mut i32) (i32.const 24))
|
||||
(global $std/gc-integration/b_ref (mut i32) (i32.const 32))
|
||||
@ -14,7 +14,7 @@
|
||||
(export "memory" (memory $0))
|
||||
(export "table" (table $0))
|
||||
(start $start)
|
||||
(func $start:std/gc-integration~anonymous|1 (; 1 ;) (type $i_) (param $0 i32)
|
||||
(func $start:std/gc-integration~anonymous|0 (; 1 ;) (type $i_) (param $0 i32)
|
||||
global.get $std/gc-integration/i
|
||||
i32.const 1
|
||||
i32.add
|
||||
|
@ -6,7 +6,7 @@
|
||||
(memory $0 1)
|
||||
(data (i32.const 8) "\15\00\00\00s\00t\00d\00/\00g\00c\00-\00i\00n\00t\00e\00g\00r\00a\00t\00i\00o\00n\00.\00t\00s\00")
|
||||
(table $0 2 funcref)
|
||||
(elem (i32.const 0) $null $start:std/gc-integration~anonymous|1)
|
||||
(elem (i32.const 0) $null $start:std/gc-integration~anonymous|0)
|
||||
(global $std/gc-integration/B.c i32 (i32.const 8))
|
||||
(global $std/gc-integration/B.d (mut i32) (i32.const 16))
|
||||
(global $std/gc-integration/no_ref (mut i32) (i32.const 64))
|
||||
@ -17,7 +17,7 @@
|
||||
(export "memory" (memory $0))
|
||||
(export "table" (table $0))
|
||||
(start $start)
|
||||
(func $start:std/gc-integration~anonymous|1 (; 1 ;) (type $i_) (param $0 i32)
|
||||
(func $start:std/gc-integration~anonymous|0 (; 1 ;) (type $i_) (param $0 i32)
|
||||
local.get $0
|
||||
block (result i32)
|
||||
global.get $std/gc-integration/i
|
||||
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -4,6 +4,7 @@
|
||||
(x?) => x;
|
||||
(x?, y?) => x;
|
||||
(x?: i32) => x;
|
||||
x => x;
|
||||
|
||||
// not an array function
|
||||
(b ? x : y);
|
||||
|
@ -3,9 +3,6 @@
|
||||
(x?) => x;
|
||||
(x?, y?) => x;
|
||||
(x?: i32) => x;
|
||||
x => x;
|
||||
(b ? x : y);
|
||||
(b ? f : g)();
|
||||
// ERROR 1110: "Type expected." in arrow-functions.ts:3:8
|
||||
// ERROR 1110: "Type expected." in arrow-functions.ts:4:4
|
||||
// ERROR 1110: "Type expected." in arrow-functions.ts:5:8
|
||||
// ERROR 1110: "Type expected." in arrow-functions.ts:6:9
|
||||
|
Loading…
x
Reference in New Issue
Block a user