More std array

This commit is contained in:
dcodeIO
2018-01-14 21:17:43 +01:00
parent 827bb4afe8
commit 49d29fc9f2
13 changed files with 1149 additions and 313 deletions

View File

@ -2469,7 +2469,7 @@ export class Compiler extends DiagnosticEmitter {
} else { // too few arguments
this.error(DiagnosticCode.Expected_at_least_0_arguments_but_got_1, reportNode.range,
(operandIndex + numParametersInclThis - numParameters).toString(10),
(operandIndex + numParameters - numParametersInclThis).toString(10),
numArguments.toString(10)
);
return this.module.createUnreachable();
@ -2686,7 +2686,7 @@ export class Compiler extends DiagnosticEmitter {
case ElementKind.PROPERTY: // instance property (here: getter)
var getter = (<Property>element).getterPrototype;
assert(getter != null);
var getterInstance = (<FunctionPrototype>getter).resolve(); // reports
var getterInstance = (<FunctionPrototype>getter).resolve(null); // reports
if (!getterInstance)
return this.module.createUnreachable();
assert(getterInstance.parameters.length == 0);

View File

@ -564,7 +564,7 @@ export class Parser extends DiagnosticEmitter {
}
var initializer: Expression | null = null;
if (tn.skip(Token.EQUALS)) {
initializer = this.parseExpression(tn);
initializer = this.parseExpression(tn, Precedence.COMMA + 1);
if (!initializer)
return null;
}

View File

@ -1562,7 +1562,7 @@ export class FunctionPrototype extends Element {
if (typeNode = declaration.parameters[i].type) {
var parameterType = this.program.resolveType(typeNode, contextualTypeArguments, true); // reports
if (parameterType) {
parameters[i] = new Parameter(declaration.parameters[i].name.name, parameterType);
parameters[i] = new Parameter(declaration.parameters[i].name.name, parameterType, declaration.parameters[i].initializer);
parameterTypes[i] = parameterType;
} else
return null;
@ -2006,10 +2006,15 @@ export class ClassPrototype extends Element {
instance.members.set(member.simpleName, methodPrototype);
break;
case ElementKind.PROPERTY: // instance properties are just copied because there is nothing to partially-resolve
case ElementKind.PROPERTY: // instance properties are cloned with partially resolved getters and setters
if (!instance.members)
instance.members = new Map();
instance.members.set(member.simpleName, member);
assert((<Property>member).getterPrototype);
var instanceProperty = new Property(this.program, member.simpleName, member.internalName, this);
instanceProperty.getterPrototype = (<FunctionPrototype>(<Property>member).getterPrototype).resolvePartial(typeArguments);
if ((<Property>member).setterPrototype)
instanceProperty.setterPrototype = (<FunctionPrototype>(<Property>member).setterPrototype).resolvePartial(typeArguments);
instance.members.set(member.simpleName, instanceProperty);
break;
default: