Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(11)

Side by Side Diff: frog/minfrog

Issue 8878001: frog: improve errors with named param (bug 507) (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: missed adding the new test Created 9 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « frog/member.dart ('k') | tests/language/language.status » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env node 1 #!/usr/bin/env node
2 // ********** Library dart:core ************** 2 // ********** Library dart:core **************
3 // ********** Natives dart:core ************** 3 // ********** Natives dart:core **************
4 /** 4 /**
5 * Generates a dynamic call stub for a function. 5 * Generates a dynamic call stub for a function.
6 * Our goal is to create a stub method like this on-the-fly: 6 * Our goal is to create a stub method like this on-the-fly:
7 * function($0, $1, capture) { return this($0, $1, true, capture); } 7 * function($0, $1, capture) { return this($0, $1, true, capture); }
8 * 8 *
9 * This stub then replaces the dynamic one on Function, with one that is 9 * This stub then replaces the dynamic one on Function, with one that is
10 * specialized for that particular function, taking into account its default 10 * specialized for that particular function, taking into account its default
(...skipping 4277 matching lines...) Expand 10 before | Expand all | Expand 10 after
4288 type.resolve$0(); 4288 type.resolve$0();
4289 } 4289 }
4290 } 4290 }
4291 Library.prototype.visitSources = function() { 4291 Library.prototype.visitSources = function() {
4292 var visitor = new _LibraryVisitor(this); 4292 var visitor = new _LibraryVisitor(this);
4293 visitor.addSource$1(this.baseSource); 4293 visitor.addSource$1(this.baseSource);
4294 } 4294 }
4295 Library.prototype.toString = function() { 4295 Library.prototype.toString = function() {
4296 return this.baseSource.filename; 4296 return this.baseSource.filename;
4297 } 4297 }
4298 Library.prototype.hashCode = function() {
4299 return this.baseSource.filename.hashCode();
4300 }
4301 Library.prototype.$eq = function(other) {
4302 return (other instanceof Library) && $eq(other.get$baseSource().get$filename() , this.baseSource.filename);
4303 }
4298 Library.prototype.findTypeByName$1 = Library.prototype.findTypeByName; 4304 Library.prototype.findTypeByName$1 = Library.prototype.findTypeByName;
4305 Library.prototype.hashCode$0 = Library.prototype.hashCode;
4299 Library.prototype.resolve$0 = Library.prototype.resolve; 4306 Library.prototype.resolve$0 = Library.prototype.resolve;
4300 Library.prototype.toString$0 = Library.prototype.toString; 4307 Library.prototype.toString$0 = Library.prototype.toString;
4301 Library.prototype.visitSources$0 = Library.prototype.visitSources; 4308 Library.prototype.visitSources$0 = Library.prototype.visitSources;
4302 // ********** Code for _LibraryVisitor ************** 4309 // ********** Code for _LibraryVisitor **************
4303 function _LibraryVisitor(library) { 4310 function _LibraryVisitor(library) {
4304 this.seenImport = false 4311 this.seenImport = false
4305 this.seenSource = false 4312 this.seenSource = false
4306 this.seenResource = false 4313 this.seenResource = false
4307 this.isTop = true 4314 this.isTop = true
4308 this.library = library; 4315 this.library = library;
(...skipping 356 matching lines...) Expand 10 before | Expand all | Expand 10 after
4665 Member.prototype.get$generatedFactoryName = function() { 4672 Member.prototype.get$generatedFactoryName = function() {
4666 var prefix = ('' + this.declaringType.get$jsname() + '.' + this.get$constructo rName() + '\$'); 4673 var prefix = ('' + this.declaringType.get$jsname() + '.' + this.get$constructo rName() + '\$');
4667 if (this.name == '') { 4674 if (this.name == '') {
4668 return ('' + prefix + 'factory'); 4675 return ('' + prefix + 'factory');
4669 } 4676 }
4670 else { 4677 else {
4671 return ('' + prefix + this.name + '\$factory'); 4678 return ('' + prefix + this.name + '\$factory');
4672 } 4679 }
4673 } 4680 }
4674 Member.prototype.hashCode = function() { 4681 Member.prototype.hashCode = function() {
4675 return (this.declaringType.hashCode() << 4) ^ this.name.hashCode(); 4682 var typeCode = this.declaringType == null ? 1 : this.declaringType.hashCode();
4683 var nameCode = this.get$isConstructor() ? this.get$constructorName().hashCode( ) : this.name.hashCode();
4684 return (typeCode << 4) ^ nameCode;
4685 }
4686 Member.prototype.$eq = function(other) {
4687 return (other instanceof Member) && $eq(this.get$isConstructor(), other.get$is Constructor()) && $eq(this.declaringType, other.get$declaringType()) && (this.ge t$isConstructor() ? this.get$constructorName() == other.get$constructorName() : this.name == other.get$name());
4676 } 4688 }
4677 Member.prototype._get$3 = Member.prototype._get; 4689 Member.prototype._get$3 = Member.prototype._get;
4678 Member.prototype._get$3$isDynamic = Member.prototype._get; 4690 Member.prototype._get$3$isDynamic = Member.prototype._get;
4679 Member.prototype._get$4 = Member.prototype._get; 4691 Member.prototype._get$4 = Member.prototype._get;
4680 Member.prototype._set$4 = Member.prototype._set; 4692 Member.prototype._set$4 = Member.prototype._set;
4681 Member.prototype._set$4$isDynamic = Member.prototype._set; 4693 Member.prototype._set$4$isDynamic = Member.prototype._set;
4682 Member.prototype._set$5 = Member.prototype._set; 4694 Member.prototype._set$5 = Member.prototype._set;
4683 Member.prototype.canInvoke$2 = Member.prototype.canInvoke; 4695 Member.prototype.canInvoke$2 = Member.prototype.canInvoke;
4684 Member.prototype.computeValue$0 = Member.prototype.computeValue; 4696 Member.prototype.computeValue$0 = Member.prototype.computeValue;
4685 Member.prototype.hashCode$0 = Member.prototype.hashCode; 4697 Member.prototype.hashCode$0 = Member.prototype.hashCode;
(...skipping 652 matching lines...) Expand 10 before | Expand all | Expand 10 after
5338 i < this.parameters.length; i++) { 5350 i < this.parameters.length; i++) {
5339 var arg = args.getValue(this.parameters.$index(i).get$name()); 5351 var arg = args.getValue(this.parameters.$index(i).get$name());
5340 if (arg != null && arg.needsConversion$1(this.parameters.$index(i).get$typ e())) { 5352 if (arg != null && arg.needsConversion$1(this.parameters.$index(i).get$typ e())) {
5341 return true; 5353 return true;
5342 } 5354 }
5343 } 5355 }
5344 } 5356 }
5345 return false; 5357 return false;
5346 } 5358 }
5347 MethodMember._argCountMsg = function(actual, expected, atLeast) { 5359 MethodMember._argCountMsg = function(actual, expected, atLeast) {
5348 return 'wrong number of arguments, expected ' + ('' + (atLeast ? "at least " : "") + expected + ' but found ' + actual); 5360 return 'wrong number of positional arguments, expected ' + ('' + (atLeast ? "a t least " : "") + expected + ' but found ' + actual);
5349 } 5361 }
5350 MethodMember.prototype._argError = function(context, node, target, args, msg) { 5362 MethodMember.prototype._argError = function(context, node, target, args, msg, sp an) {
5351 if (this.isStatic || this.get$isConstructor()) { 5363 if (this.isStatic || this.get$isConstructor()) {
5352 $globals.world.error(msg, node.span); 5364 $globals.world.error(msg, span);
5353 } 5365 }
5354 else { 5366 else {
5355 $globals.world.warning(msg, node.span); 5367 $globals.world.warning(msg, span);
5356 } 5368 }
5357 return target.invokeNoSuchMethod(context, this.name, node, args); 5369 return target.invokeNoSuchMethod(context, this.name, node, args);
5358 } 5370 }
5359 MethodMember.prototype.genParameterValues = function() { 5371 MethodMember.prototype.genParameterValues = function() {
5360 var $$list = this.parameters; 5372 var $$list = this.parameters;
5361 for (var $$i = 0;$$i < $$list.length; $$i++) { 5373 for (var $$i = 0;$$i < $$list.length; $$i++) {
5362 var p = $$list.$index($$i); 5374 var p = $$list.$index($$i);
5363 p.genValue$2(this, this.generator); 5375 p.genValue$2(this, this.generator);
5364 } 5376 }
5365 } 5377 }
(...skipping 13 matching lines...) Expand all
5379 var argsCode = []; 5391 var argsCode = [];
5380 if (!target.isType && (this.get$isConstructor() || target.isSuper)) { 5392 if (!target.isType && (this.get$isConstructor() || target.isSuper)) {
5381 argsCode.add$1('this'); 5393 argsCode.add$1('this');
5382 } 5394 }
5383 var bareCount = args.get$bareCount(); 5395 var bareCount = args.get$bareCount();
5384 for (var i = 0; 5396 for (var i = 0;
5385 i < bareCount; i++) { 5397 i < bareCount; i++) {
5386 var arg = args.values.$index(i); 5398 var arg = args.values.$index(i);
5387 if (i >= this.parameters.length) { 5399 if (i >= this.parameters.length) {
5388 var msg = MethodMember._argCountMsg(args.get$length(), this.parameters.len gth, false); 5400 var msg = MethodMember._argCountMsg(args.get$length(), this.parameters.len gth, false);
5389 return this._argError(context, node, target, args, msg); 5401 return this._argError(context, node, target, args, msg, args.nodes.$index( i).get$span());
5390 } 5402 }
5391 arg = arg.convertTo$4(context, this.parameters.$index(i).get$type(), node, i sDynamic); 5403 arg = arg.convertTo$4(context, this.parameters.$index(i).get$type(), node, i sDynamic);
5392 if (this.isConst && arg.get$isConst()) { 5404 if (this.isConst && arg.get$isConst()) {
5393 argsCode.add$1(arg.get$canonicalCode()); 5405 argsCode.add$1(arg.get$canonicalCode());
5394 } 5406 }
5395 else { 5407 else {
5396 argsCode.add$1(arg.get$code()); 5408 argsCode.add$1(arg.get$code());
5397 } 5409 }
5398 } 5410 }
5411 var namedArgsUsed = 0;
5399 if (bareCount < this.parameters.length) { 5412 if (bareCount < this.parameters.length) {
5400 this.genParameterValues(); 5413 this.genParameterValues();
5401 var namedArgsUsed = 0;
5402 for (var i = bareCount; 5414 for (var i = bareCount;
5403 i < this.parameters.length; i++) { 5415 i < this.parameters.length; i++) {
5404 var arg = args.getValue(this.parameters.$index(i).get$name()); 5416 var arg = args.getValue(this.parameters.$index(i).get$name());
5405 if (arg == null) { 5417 if (arg == null) {
5406 arg = this.parameters.$index(i).get$value(); 5418 arg = this.parameters.$index(i).get$value();
5407 } 5419 }
5408 else { 5420 else {
5409 arg = arg.convertTo$4(context, this.parameters.$index(i).get$type(), nod e, isDynamic); 5421 arg = arg.convertTo$4(context, this.parameters.$index(i).get$type(), nod e, isDynamic);
5410 namedArgsUsed++; 5422 namedArgsUsed++;
5411 } 5423 }
5412 if (arg == null || !this.parameters.$index(i).get$isOptional()) { 5424 if (arg == null || !this.parameters.$index(i).get$isOptional()) {
5413 var msg = MethodMember._argCountMsg(Math.min(i, args.get$length()), i + 1, true); 5425 var msg = MethodMember._argCountMsg(Math.min(i, args.get$length()), i + 1, true);
5414 return this._argError(context, node, target, args, msg); 5426 return this._argError(context, node, target, args, msg, args.nodes.$inde x(i).get$span());
5415 } 5427 }
5416 else { 5428 else {
5417 argsCode.add$1(this.isConst && arg.get$isConst() ? arg.get$canonicalCode () : arg.get$code()); 5429 argsCode.add$1(this.isConst && arg.get$isConst() ? arg.get$canonicalCode () : arg.get$code());
5418 } 5430 }
5419 } 5431 }
5420 if (namedArgsUsed < args.get$nameCount()) { 5432 Arguments.removeTrailingNulls(argsCode);
5421 var seen = new HashSetImplementation(); 5433 }
5422 for (var i = bareCount; 5434 if (namedArgsUsed < args.get$nameCount()) {
5423 i < args.get$length(); i++) { 5435 var seen = new HashSetImplementation();
5424 var name = args.getName(i); 5436 for (var i = bareCount;
5425 if (seen.contains$1(name)) { 5437 i < args.get$length(); i++) {
5426 return this._argError(context, node, target, args, ('duplicate argumen t "' + name + '"')); 5438 var name = args.getName(i);
5427 } 5439 if (seen.contains$1(name)) {
5428 seen.add$1(name); 5440 return this._argError(context, node, target, args, ('duplicate argument "' + name + '"'), args.nodes.$index(i).get$span());
5429 var p = this.indexOfParameter(name);
5430 if (p < 0) {
5431 return this._argError(context, node, target, args, ('method does not h ave optional parameter "' + name + '"'));
5432 }
5433 else if (p < bareCount) {
5434 return this._argError(context, node, target, args, ('argument "' + nam e + '" passed as positional and named'));
5435 }
5436 } 5441 }
5437 $globals.world.internalError(('wrong named arguments calling ' + this.name ), node.span); 5442 seen.add$1(name);
5443 var p = this.indexOfParameter(name);
5444 if (p < 0) {
5445 return this._argError(context, node, target, args, ('method does not hav e optional parameter "' + name + '"'), args.nodes.$index(i).get$span());
5446 }
5447 else if (p < bareCount) {
5448 return this._argError(context, node, target, args, ('argument "' + name + '" passed as positional and named'), args.nodes.$index(p).get$span());
5449 }
5438 } 5450 }
5439 Arguments.removeTrailingNulls(argsCode); 5451 $globals.world.internalError(('wrong named arguments calling ' + this.name), node.span);
5440 } 5452 }
5441 var argsString = Strings.join(argsCode, ', '); 5453 var argsString = Strings.join(argsCode, ', ');
5442 if (this.get$isConstructor()) { 5454 if (this.get$isConstructor()) {
5443 return this._invokeConstructor(context, node, target, args, argsString); 5455 return this._invokeConstructor(context, node, target, args, argsString);
5444 } 5456 }
5445 if (target.isSuper) { 5457 if (target.isSuper) {
5446 return new Value(this.get$inferredResult(), ('' + this.declaringType.get$jsn ame() + '.prototype.' + this.get$jsname() + '.call(' + argsString + ')'), node.s pan, true); 5458 return new Value(this.get$inferredResult(), ('' + this.declaringType.get$jsn ame() + '.prototype.' + this.get$jsname() + '.call(' + argsString + ')'), node.s pan, true);
5447 } 5459 }
5448 if (this.get$isOperator()) { 5460 if (this.get$isOperator()) {
5449 return this._invokeBuiltin(context, node, target, args, argsCode, isDynamic) ; 5461 return this._invokeBuiltin(context, node, target, args, argsCode, isDynamic) ;
(...skipping 5378 matching lines...) Expand 10 before | Expand all | Expand 10 after
10828 return true; 10840 return true;
10829 } 10841 }
10830 if (this.get$interfaces() != null && this.get$interfaces().some((function (i) { 10842 if (this.get$interfaces() != null && this.get$interfaces().some((function (i) {
10831 return i.isSubtypeOf$1(other); 10843 return i.isSubtypeOf$1(other);
10832 }) 10844 })
10833 )) { 10845 )) {
10834 return true; 10846 return true;
10835 } 10847 }
10836 return false; 10848 return false;
10837 } 10849 }
10850 Type.prototype.hashCode = function() {
10851 var libraryCode = this.get$library() == null ? 1 : this.get$library().hashCode ();
10852 var nameCode = this.name == null ? 1 : this.name.hashCode();
10853 return (libraryCode << 4) ^ nameCode;
10854 }
10855 Type.prototype.$eq = function(other) {
10856 return (other instanceof Type) && $eq(other.get$name(), this.name) && $eq(this .get$library(), other.get$library());
10857 }
10838 Type._isFunctionSubtypeOf = function(t, s) { 10858 Type._isFunctionSubtypeOf = function(t, s) {
10839 if (!s.returnType.get$isVoid() && !s.returnType.isAssignable(t.returnType)) { 10859 if (!s.returnType.get$isVoid() && !s.returnType.isAssignable(t.returnType)) {
10840 return false; 10860 return false;
10841 } 10861 }
10842 var tp = t.parameters; 10862 var tp = t.parameters;
10843 var sp = s.parameters; 10863 var sp = s.parameters;
10844 if (tp.length < sp.length) return false; 10864 if (tp.length < sp.length) return false;
10845 for (var i = 0; 10865 for (var i = 0;
10846 i < sp.length; i++) { 10866 i < sp.length; i++) {
10847 if ($ne(tp.$index(i).get$isOptional(), sp.$index(i).get$isOptional())) retur n false; 10867 if ($ne(tp.$index(i).get$isOptional(), sp.$index(i).get$isOptional())) retur n false;
10848 if (tp.$index(i).get$isOptional() && $ne(tp.$index(i).get$name(), sp.$index( i).get$name())) return false; 10868 if (tp.$index(i).get$isOptional() && $ne(tp.$index(i).get$name(), sp.$index( i).get$name())) return false;
10849 if (!tp.$index(i).get$type().isAssignable$1(sp.$index(i).get$type())) return false; 10869 if (!tp.$index(i).get$type().isAssignable$1(sp.$index(i).get$type())) return false;
10850 } 10870 }
10851 if (tp.length > sp.length && !tp.$index(sp.length).get$isOptional()) return fa lse; 10871 if (tp.length > sp.length && !tp.$index(sp.length).get$isOptional()) return fa lse;
10852 return true; 10872 return true;
10853 } 10873 }
10854 Type.prototype._checkExtends$0 = Type.prototype._checkExtends; 10874 Type.prototype._checkExtends$0 = Type.prototype._checkExtends;
10855 Type.prototype.addDirectSubtype$1 = Type.prototype.addDirectSubtype; 10875 Type.prototype.addDirectSubtype$1 = Type.prototype.addDirectSubtype;
10856 Type.prototype.ensureSubtypeOf$3 = Type.prototype.ensureSubtypeOf; 10876 Type.prototype.ensureSubtypeOf$3 = Type.prototype.ensureSubtypeOf;
10857 Type.prototype.getConstructor$1 = Type.prototype.getConstructor; 10877 Type.prototype.getConstructor$1 = Type.prototype.getConstructor;
10858 Type.prototype.getFactory$2 = Type.prototype.getFactory; 10878 Type.prototype.getFactory$2 = Type.prototype.getFactory;
10859 Type.prototype.getMember$1 = Type.prototype.getMember; 10879 Type.prototype.getMember$1 = Type.prototype.getMember;
10860 Type.prototype.getOrMakeConcreteType$1 = Type.prototype.getOrMakeConcreteType; 10880 Type.prototype.getOrMakeConcreteType$1 = Type.prototype.getOrMakeConcreteType;
10881 Type.prototype.hashCode$0 = Type.prototype.hashCode;
10861 Type.prototype.isAssignable$1 = Type.prototype.isAssignable; 10882 Type.prototype.isAssignable$1 = Type.prototype.isAssignable;
10862 Type.prototype.isSubtypeOf$1 = Type.prototype.isSubtypeOf; 10883 Type.prototype.isSubtypeOf$1 = Type.prototype.isSubtypeOf;
10863 Type.prototype.markUsed$0 = Type.prototype.markUsed; 10884 Type.prototype.markUsed$0 = Type.prototype.markUsed;
10864 Type.prototype.resolveTypeParams$1 = Type.prototype.resolveTypeParams; 10885 Type.prototype.resolveTypeParams$1 = Type.prototype.resolveTypeParams;
10865 // ********** Code for ParameterType ************** 10886 // ********** Code for ParameterType **************
10866 function ParameterType(name, typeParameter) { 10887 function ParameterType(name, typeParameter) {
10867 this.typeParameter = typeParameter; 10888 this.typeParameter = typeParameter;
10868 // Initializers done 10889 // Initializers done
10869 Type.call(this, name); 10890 Type.call(this, name);
10870 } 10891 }
(...skipping 2285 matching lines...) Expand 10 before | Expand all | Expand 10 after
13156 $globals._MAGENTA_COLOR = '\u001b[35m'; 13177 $globals._MAGENTA_COLOR = '\u001b[35m';
13157 $globals._NO_COLOR = '\u001b[0m'; 13178 $globals._NO_COLOR = '\u001b[0m';
13158 $globals._RED_COLOR = '\u001b[31m'; 13179 $globals._RED_COLOR = '\u001b[31m';
13159 } 13180 }
13160 var const$0 = new NoMoreElementsException()/*const NoMoreElementsException()*/; 13181 var const$0 = new NoMoreElementsException()/*const NoMoreElementsException()*/;
13161 var const$2 = new EmptyQueueException()/*const EmptyQueueException()*/; 13182 var const$2 = new EmptyQueueException()/*const EmptyQueueException()*/;
13162 var const$3 = new _DeletedKeySentinel()/*const _DeletedKeySentinel()*/; 13183 var const$3 = new _DeletedKeySentinel()/*const _DeletedKeySentinel()*/;
13163 var $globals = {}; 13184 var $globals = {};
13164 $static_init(); 13185 $static_init();
13165 main(); 13186 main();
OLDNEW
« no previous file with comments | « frog/member.dart ('k') | tests/language/language.status » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698