diff --git a/bin/parser_generator_for_spec.dart b/bin/parser_generator_for_spec.dart index 8aeca334c..65dcb27ac 100644 --- a/bin/parser_generator_for_spec.dart +++ b/bin/parser_generator_for_spec.dart @@ -96,6 +96,8 @@ main(arguments) { 'map["square"] = 6', 'method', 'method()', + 'causeException', + 'causeException()', 'notAFn()', 'notmixed', 'obj[0].name=1', diff --git a/lib/core/parser/parser_dynamic.dart b/lib/core/parser/parser_dynamic.dart index 967db7bed..2657731c3 100644 --- a/lib/core/parser/parser_dynamic.dart +++ b/lib/core/parser/parser_dynamic.dart @@ -45,11 +45,7 @@ class DynamicClosureMap implements ClosureMap { throw "Property '$name' is not of type function."; } } else { - try { - return reflect(o).invoke(symbol, posArgs, sNamedArgs).reflectee; - } on NoSuchMethodError catch (e) { - throw 'Undefined function $name'; - } + return reflect(o).invoke(symbol, posArgs, sNamedArgs).reflectee; } }; } diff --git a/pubspec.lock b/pubspec.lock index dc4a9ab74..a6bebcbef 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -60,7 +60,7 @@ packages: path: description: path source: hosted - version: "1.1.0" + version: "1.2.0" perf_api: description: perf_api source: hosted @@ -76,7 +76,7 @@ packages: stack_trace: description: stack_trace source: hosted - version: "0.9.3+1" + version: "0.9.3+2" unittest: description: unittest source: hosted diff --git a/test.js b/test.js new file mode 100644 index 000000000..e69de29bb diff --git a/test/core/parser/parser_spec.dart b/test/core/parser/parser_spec.dart index 60ecd68dc..d1600aa0b 100644 --- a/test/core/parser/parser_spec.dart +++ b/test/core/parser/parser_spec.dart @@ -10,6 +10,7 @@ class TestData { set str(x) => _str = x; method() => "testMethod"; + causeException() => this.x(); sub1(a, {b: 0}) => a - b; sub2({a: 0, b: 0}) => a - b; } @@ -435,6 +436,12 @@ main() { expect(context['obj'].field['key']).toEqual(4); }); + iit('should rethrow an error from a function', () { + expect(() { + parser("causeException()").eval(new TestData()); + }).toThrow('NoSuchMethodError'); + }); + xit('should throw a nice error for type mismatch', () { context['obj'] = new SetterObject();