| 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 part of dart2js.js_emitter; | 5 part of dart2js.js_emitter; |
| 6 | 6 |
| 7 class InterceptorStubGenerator { | 7 class InterceptorStubGenerator { |
| 8 final Compiler compiler; | 8 final Compiler compiler; |
| 9 final Namer namer; | 9 final Namer namer; |
| 10 final JavaScriptBackend backend; | 10 final JavaScriptBackend backend; |
| (...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 155 r'''{ | 155 r'''{ |
| 156 if (typeof receiver != "object") { | 156 if (typeof receiver != "object") { |
| 157 if (typeof receiver == "function" ) return #; | 157 if (typeof receiver == "function" ) return #; |
| 158 return receiver; | 158 return receiver; |
| 159 } | 159 } |
| 160 if (receiver instanceof #) return receiver; | 160 if (receiver instanceof #) return receiver; |
| 161 return #(receiver); | 161 return #(receiver); |
| 162 }''', | 162 }''', |
| 163 [ | 163 [ |
| 164 interceptorFor(helpers.jsJavaScriptFunctionClass), | 164 interceptorFor(helpers.jsJavaScriptFunctionClass), |
| 165 backend.emitter.constructorAccess(compiler.coreClasses.objectClass), | 165 backend.emitter |
| 166 .constructorAccess(compiler.commonElements.objectClass), |
| 166 backend.emitter | 167 backend.emitter |
| 167 .staticFunctionAccess(helpers.getNativeInterceptorMethod) | 168 .staticFunctionAccess(helpers.getNativeInterceptorMethod) |
| 168 ])); | 169 ])); |
| 169 } else { | 170 } else { |
| 170 ClassElement jsUnknown = helpers.jsUnknownJavaScriptObjectClass; | 171 ClassElement jsUnknown = helpers.jsUnknownJavaScriptObjectClass; |
| 171 if (compiler.codegenWorld.directlyInstantiatedClasses | 172 if (compiler.codegenWorld.directlyInstantiatedClasses |
| 172 .contains(jsUnknown)) { | 173 .contains(jsUnknown)) { |
| 173 statements.add(js.statement('if (!(receiver instanceof #)) return #;', [ | 174 statements.add(js.statement('if (!(receiver instanceof #)) return #;', [ |
| 174 backend.emitter.constructorAccess(compiler.coreClasses.objectClass), | 175 backend.emitter |
| 176 .constructorAccess(compiler.commonElements.objectClass), |
| 175 interceptorFor(jsUnknown) | 177 interceptorFor(jsUnknown) |
| 176 ])); | 178 ])); |
| 177 } | 179 } |
| 178 | 180 |
| 179 statements.add(js.statement('return receiver')); | 181 statements.add(js.statement('return receiver')); |
| 180 } | 182 } |
| 181 | 183 |
| 182 return js('''function(receiver) { #; }''', new jsAst.Block(statements)); | 184 return js('''function(receiver) { #; }''', new jsAst.Block(statements)); |
| 183 } | 185 } |
| 184 | 186 |
| (...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 392 | 394 |
| 393 var map = new jsAst.ObjectInitializer(properties); | 395 var map = new jsAst.ObjectInitializer(properties); |
| 394 elements.add(map); | 396 elements.add(map); |
| 395 } | 397 } |
| 396 } | 398 } |
| 397 } | 399 } |
| 398 | 400 |
| 399 return new jsAst.ArrayInitializer(elements); | 401 return new jsAst.ArrayInitializer(elements); |
| 400 } | 402 } |
| 401 } | 403 } |
| OLD | NEW |