| Index: frog/minfrog
|
| diff --git a/frog/minfrog b/frog/minfrog
|
| index d90745ecd0482448c6f268a97c8dd95a170aa650..5ec4fcbddd7f69e7a66446f274a7243ec03b9d2a 100755
|
| --- a/frog/minfrog
|
| +++ b/frog/minfrog
|
| @@ -4295,7 +4295,14 @@ Library.prototype.visitSources = function() {
|
| Library.prototype.toString = function() {
|
| return this.baseSource.filename;
|
| }
|
| +Library.prototype.hashCode = function() {
|
| + return this.baseSource.filename.hashCode();
|
| +}
|
| +Library.prototype.$eq = function(other) {
|
| + return (other instanceof Library) && $eq(other.get$baseSource().get$filename(), this.baseSource.filename);
|
| +}
|
| Library.prototype.findTypeByName$1 = Library.prototype.findTypeByName;
|
| +Library.prototype.hashCode$0 = Library.prototype.hashCode;
|
| Library.prototype.resolve$0 = Library.prototype.resolve;
|
| Library.prototype.toString$0 = Library.prototype.toString;
|
| Library.prototype.visitSources$0 = Library.prototype.visitSources;
|
| @@ -4672,7 +4679,12 @@ Member.prototype.get$generatedFactoryName = function() {
|
| }
|
| }
|
| Member.prototype.hashCode = function() {
|
| - return (this.declaringType.hashCode() << 4) ^ this.name.hashCode();
|
| + var typeCode = this.declaringType == null ? 1 : this.declaringType.hashCode();
|
| + var nameCode = this.get$isConstructor() ? this.get$constructorName().hashCode() : this.name.hashCode();
|
| + return (typeCode << 4) ^ nameCode;
|
| +}
|
| +Member.prototype.$eq = function(other) {
|
| + return (other instanceof Member) && $eq(this.get$isConstructor(), other.get$isConstructor()) && $eq(this.declaringType, other.get$declaringType()) && (this.get$isConstructor() ? this.get$constructorName() == other.get$constructorName() : this.name == other.get$name());
|
| }
|
| Member.prototype._get$3 = Member.prototype._get;
|
| Member.prototype._get$3$isDynamic = Member.prototype._get;
|
| @@ -5345,14 +5357,14 @@ MethodMember.prototype.needsArgumentConversion = function(args) {
|
| return false;
|
| }
|
| MethodMember._argCountMsg = function(actual, expected, atLeast) {
|
| - return 'wrong number of arguments, expected ' + ('' + (atLeast ? "at least " : "") + expected + ' but found ' + actual);
|
| + return 'wrong number of positional arguments, expected ' + ('' + (atLeast ? "at least " : "") + expected + ' but found ' + actual);
|
| }
|
| -MethodMember.prototype._argError = function(context, node, target, args, msg) {
|
| +MethodMember.prototype._argError = function(context, node, target, args, msg, span) {
|
| if (this.isStatic || this.get$isConstructor()) {
|
| - $globals.world.error(msg, node.span);
|
| + $globals.world.error(msg, span);
|
| }
|
| else {
|
| - $globals.world.warning(msg, node.span);
|
| + $globals.world.warning(msg, span);
|
| }
|
| return target.invokeNoSuchMethod(context, this.name, node, args);
|
| }
|
| @@ -5386,7 +5398,7 @@ MethodMember.prototype.invoke = function(context, node, target, args, isDynamic)
|
| var arg = args.values.$index(i);
|
| if (i >= this.parameters.length) {
|
| var msg = MethodMember._argCountMsg(args.get$length(), this.parameters.length, false);
|
| - return this._argError(context, node, target, args, msg);
|
| + return this._argError(context, node, target, args, msg, args.nodes.$index(i).get$span());
|
| }
|
| arg = arg.convertTo$4(context, this.parameters.$index(i).get$type(), node, isDynamic);
|
| if (this.isConst && arg.get$isConst()) {
|
| @@ -5396,9 +5408,9 @@ MethodMember.prototype.invoke = function(context, node, target, args, isDynamic)
|
| argsCode.add$1(arg.get$code());
|
| }
|
| }
|
| + var namedArgsUsed = 0;
|
| if (bareCount < this.parameters.length) {
|
| this.genParameterValues();
|
| - var namedArgsUsed = 0;
|
| for (var i = bareCount;
|
| i < this.parameters.length; i++) {
|
| var arg = args.getValue(this.parameters.$index(i).get$name());
|
| @@ -5411,32 +5423,32 @@ MethodMember.prototype.invoke = function(context, node, target, args, isDynamic)
|
| }
|
| if (arg == null || !this.parameters.$index(i).get$isOptional()) {
|
| var msg = MethodMember._argCountMsg(Math.min(i, args.get$length()), i + 1, true);
|
| - return this._argError(context, node, target, args, msg);
|
| + return this._argError(context, node, target, args, msg, args.nodes.$index(i).get$span());
|
| }
|
| else {
|
| argsCode.add$1(this.isConst && arg.get$isConst() ? arg.get$canonicalCode() : arg.get$code());
|
| }
|
| }
|
| - if (namedArgsUsed < args.get$nameCount()) {
|
| - var seen = new HashSetImplementation();
|
| - for (var i = bareCount;
|
| - i < args.get$length(); i++) {
|
| - var name = args.getName(i);
|
| - if (seen.contains$1(name)) {
|
| - return this._argError(context, node, target, args, ('duplicate argument "' + name + '"'));
|
| - }
|
| - seen.add$1(name);
|
| - var p = this.indexOfParameter(name);
|
| - if (p < 0) {
|
| - return this._argError(context, node, target, args, ('method does not have optional parameter "' + name + '"'));
|
| - }
|
| - else if (p < bareCount) {
|
| - return this._argError(context, node, target, args, ('argument "' + name + '" passed as positional and named'));
|
| - }
|
| + Arguments.removeTrailingNulls(argsCode);
|
| + }
|
| + if (namedArgsUsed < args.get$nameCount()) {
|
| + var seen = new HashSetImplementation();
|
| + for (var i = bareCount;
|
| + i < args.get$length(); i++) {
|
| + var name = args.getName(i);
|
| + if (seen.contains$1(name)) {
|
| + return this._argError(context, node, target, args, ('duplicate argument "' + name + '"'), args.nodes.$index(i).get$span());
|
| + }
|
| + seen.add$1(name);
|
| + var p = this.indexOfParameter(name);
|
| + if (p < 0) {
|
| + return this._argError(context, node, target, args, ('method does not have optional parameter "' + name + '"'), args.nodes.$index(i).get$span());
|
| + }
|
| + else if (p < bareCount) {
|
| + return this._argError(context, node, target, args, ('argument "' + name + '" passed as positional and named'), args.nodes.$index(p).get$span());
|
| }
|
| - $globals.world.internalError(('wrong named arguments calling ' + this.name), node.span);
|
| }
|
| - Arguments.removeTrailingNulls(argsCode);
|
| + $globals.world.internalError(('wrong named arguments calling ' + this.name), node.span);
|
| }
|
| var argsString = Strings.join(argsCode, ', ');
|
| if (this.get$isConstructor()) {
|
| @@ -10835,6 +10847,14 @@ Type.prototype.isSubtypeOf = function(other) {
|
| }
|
| return false;
|
| }
|
| +Type.prototype.hashCode = function() {
|
| + var libraryCode = this.get$library() == null ? 1 : this.get$library().hashCode();
|
| + var nameCode = this.name == null ? 1 : this.name.hashCode();
|
| + return (libraryCode << 4) ^ nameCode;
|
| +}
|
| +Type.prototype.$eq = function(other) {
|
| + return (other instanceof Type) && $eq(other.get$name(), this.name) && $eq(this.get$library(), other.get$library());
|
| +}
|
| Type._isFunctionSubtypeOf = function(t, s) {
|
| if (!s.returnType.get$isVoid() && !s.returnType.isAssignable(t.returnType)) {
|
| return false;
|
| @@ -10858,6 +10878,7 @@ Type.prototype.getConstructor$1 = Type.prototype.getConstructor;
|
| Type.prototype.getFactory$2 = Type.prototype.getFactory;
|
| Type.prototype.getMember$1 = Type.prototype.getMember;
|
| Type.prototype.getOrMakeConcreteType$1 = Type.prototype.getOrMakeConcreteType;
|
| +Type.prototype.hashCode$0 = Type.prototype.hashCode;
|
| Type.prototype.isAssignable$1 = Type.prototype.isAssignable;
|
| Type.prototype.isSubtypeOf$1 = Type.prototype.isSubtypeOf;
|
| Type.prototype.markUsed$0 = Type.prototype.markUsed;
|
|
|