| OLD | NEW |
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, 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 dart2js.js_emitter.class_stub_generator; | 5 library dart2js.js_emitter.class_stub_generator; |
| 6 | 6 |
| 7 import '../common/names.dart' show Identifiers; | 7 import '../common/names.dart' show Identifiers; |
| 8 import '../compiler.dart' show Compiler; | 8 import '../compiler.dart' show Compiler; |
| 9 import '../elements/entities.dart'; | 9 import '../elements/entities.dart'; |
| 10 import '../js/js.dart' as jsAst; | 10 import '../js/js.dart' as jsAst; |
| (...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 251 // Default values for mocked-up test libraries. | 251 // Default values for mocked-up test libraries. |
| 252 tearOffAccessExpression = | 252 tearOffAccessExpression = |
| 253 js(r'''function() { throw "Helper 'closureFromTearOff' missing." }'''); | 253 js(r'''function() { throw "Helper 'closureFromTearOff' missing." }'''); |
| 254 tearOffGlobalObjectString = js.string('MissingHelperFunction'); | 254 tearOffGlobalObjectString = js.string('MissingHelperFunction'); |
| 255 tearOffGlobalObject = js( | 255 tearOffGlobalObject = js( |
| 256 r'''(function() { throw "Helper 'closureFromTearOff' missing." })()'''); | 256 r'''(function() { throw "Helper 'closureFromTearOff' missing." })()'''); |
| 257 } | 257 } |
| 258 | 258 |
| 259 jsAst.Statement tearOffGetter; | 259 jsAst.Statement tearOffGetter; |
| 260 if (!compiler.options.useContentSecurityPolicy) { | 260 if (!compiler.options.useContentSecurityPolicy) { |
| 261 jsAst.Expression tearOffAccessText = | 261 jsAst.Expression tearOffAccessText = new jsAst.UnparsedNode( |
| 262 new jsAst.UnparsedNode(tearOffAccessExpression, compiler, false); | 262 tearOffAccessExpression, compiler.options, false); |
| 263 tearOffGetter = js.statement( | 263 tearOffGetter = js.statement( |
| 264 ''' | 264 ''' |
| 265 function tearOffGetter(funcs, reflectionInfo, name, isIntercepted) { | 265 function tearOffGetter(funcs, reflectionInfo, name, isIntercepted) { |
| 266 return isIntercepted | 266 return isIntercepted |
| 267 ? new Function("funcs", "reflectionInfo", "name", | 267 ? new Function("funcs", "reflectionInfo", "name", |
| 268 #tearOffGlobalObjectString, "c", | 268 #tearOffGlobalObjectString, "c", |
| 269 "return function tearOff_" + name + (functionCounter++) + "(x) {" + | 269 "return function tearOff_" + name + (functionCounter++) + "(x) {" + |
| 270 "if (c === null) c = " + #tearOffAccessText + "(" + | 270 "if (c === null) c = " + #tearOffAccessText + "(" + |
| 271 "this, funcs, reflectionInfo, false, [x], name);" + | 271 "this, funcs, reflectionInfo, false, [x], name);" + |
| 272 "return new c(this, funcs[0], x, name);" + | 272 "return new c(this, funcs[0], x, name);" + |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 313 if (cache === void 0) cache = #tearOff( | 313 if (cache === void 0) cache = #tearOff( |
| 314 this, funcs, reflectionInfo, true, [], name).prototype; | 314 this, funcs, reflectionInfo, true, [], name).prototype; |
| 315 return cache; | 315 return cache; |
| 316 } | 316 } |
| 317 : tearOffGetter(funcs, reflectionInfo, name, isIntercepted); | 317 : tearOffGetter(funcs, reflectionInfo, name, isIntercepted); |
| 318 }''', | 318 }''', |
| 319 {'tearOff': tearOffAccessExpression}); | 319 {'tearOff': tearOffAccessExpression}); |
| 320 | 320 |
| 321 return <jsAst.Statement>[tearOffGetter, tearOff]; | 321 return <jsAst.Statement>[tearOffGetter, tearOff]; |
| 322 } | 322 } |
| OLD | NEW |