| OLD | NEW |
| 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 library dev_compiler.src.codegen.js_codegen; | 5 library dev_compiler.src.codegen.js_codegen; |
| 6 | 6 |
| 7 import 'dart:collection' show HashSet, HashMap; | 7 import 'dart:collection' show HashSet, HashMap; |
| 8 | 8 |
| 9 import 'package:analyzer/analyzer.dart' hide ConstantEvaluator; | 9 import 'package:analyzer/analyzer.dart' hide ConstantEvaluator; |
| 10 import 'package:analyzer/src/generated/ast.dart' hide ConstantEvaluator; | 10 import 'package:analyzer/src/generated/ast.dart' hide ConstantEvaluator; |
| (...skipping 867 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 878 return parameters.parameters.any((p) => p.kind != ParameterKind.REQUIRED); | 878 return parameters.parameters.any((p) => p.kind != ParameterKind.REQUIRED); |
| 879 } | 879 } |
| 880 | 880 |
| 881 JS.Statement _emitArgumentInitializers(FormalParameterList parameters) { | 881 JS.Statement _emitArgumentInitializers(FormalParameterList parameters) { |
| 882 if (parameters == null || !_hasArgumentInitializers(parameters)) { | 882 if (parameters == null || !_hasArgumentInitializers(parameters)) { |
| 883 return null; | 883 return null; |
| 884 } | 884 } |
| 885 | 885 |
| 886 var body = []; | 886 var body = []; |
| 887 for (var param in parameters.parameters) { | 887 for (var param in parameters.parameters) { |
| 888 // TODO(justinfagnani): rename identifier if necessary | 888 var jsParam = _visit(param.identifier); |
| 889 var name = param.identifier.name; | |
| 890 | 889 |
| 891 if (param.kind == ParameterKind.NAMED) { | 890 if (param.kind == ParameterKind.NAMED) { |
| 891 // Parameters will be passed using their real names, not the (possibly |
| 892 // renamed) local variable. |
| 893 var paramName = js.string(param.identifier.name, "'"); |
| 892 body.add(js.statement('let # = # && # in # ? #.# : #;', [ | 894 body.add(js.statement('let # = # && # in # ? #.# : #;', [ |
| 893 name, | 895 jsParam, |
| 894 _namedArgTemp, | 896 _namedArgTemp, |
| 895 js.string(name, "'"), | 897 paramName, |
| 896 _namedArgTemp, | 898 _namedArgTemp, |
| 897 _namedArgTemp, | 899 _namedArgTemp, |
| 898 name, | 900 paramName, |
| 899 _defaultParamValue(param), | 901 _defaultParamValue(param), |
| 900 ])); | 902 ])); |
| 901 } else if (param.kind == ParameterKind.POSITIONAL) { | 903 } else if (param.kind == ParameterKind.POSITIONAL) { |
| 902 body.add(js.statement('if (# === void 0) # = #;', [ | 904 body.add(js.statement('if (# === void 0) # = #;', [ |
| 903 name, | 905 jsParam, |
| 904 name, | 906 jsParam, |
| 905 _defaultParamValue(param) | 907 _defaultParamValue(param) |
| 906 ])); | 908 ])); |
| 907 } | 909 } |
| 908 } | 910 } |
| 909 return _statement(body); | 911 return _statement(body); |
| 910 } | 912 } |
| 911 | 913 |
| 912 JS.Expression _defaultParamValue(FormalParameter param) { | 914 JS.Expression _defaultParamValue(FormalParameter param) { |
| 913 if (param is DefaultFormalParameter && param.defaultValue != null) { | 915 if (param is DefaultFormalParameter && param.defaultValue != null) { |
| 914 return _visit(param.defaultValue); | 916 return _visit(param.defaultValue); |
| (...skipping 1469 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2384 return filepath; | 2386 return filepath; |
| 2385 } | 2387 } |
| 2386 | 2388 |
| 2387 // TODO(jmesserly): validate the library. See issue #135. | 2389 // TODO(jmesserly): validate the library. See issue #135. |
| 2388 bool _isJsNameAnnotation(DartObjectImpl value) => value.type.name == 'JsName'; | 2390 bool _isJsNameAnnotation(DartObjectImpl value) => value.type.name == 'JsName'; |
| 2389 | 2391 |
| 2390 // TODO(jacobr): we would like to do something like the following | 2392 // TODO(jacobr): we would like to do something like the following |
| 2391 // but we don't have summary support yet. | 2393 // but we don't have summary support yet. |
| 2392 // bool _supportJsExtensionMethod(AnnotatedNode node) => | 2394 // bool _supportJsExtensionMethod(AnnotatedNode node) => |
| 2393 // _getAnnotation(node, "SupportJsExtensionMethod") != null; | 2395 // _getAnnotation(node, "SupportJsExtensionMethod") != null; |
| OLD | NEW |