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

Side by Side Diff: dart/sdk/lib/_internal/compiler/implementation/js_backend/emitter.dart

Issue 23996002: Use interceptors to handle runtime types. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 7 years, 3 months 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
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, 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 js_backend; 5 part of js_backend;
6 6
7 /** 7 /**
8 * A function element that represents a closure call. The signature is copied 8 * A function element that represents a closure call. The signature is copied
9 * from the given element. 9 * from the given element.
10 */ 10 */
(...skipping 3141 matching lines...) Expand 10 before | Expand all | Expand 10 after
3152 } 3152 }
3153 if (hasBool) { 3153 if (hasBool) {
3154 block.statements.add(buildInterceptorCheck(backend.jsBoolClass)); 3154 block.statements.add(buildInterceptorCheck(backend.jsBoolClass));
3155 } 3155 }
3156 // TODO(ahe): It might be faster to check for Array before 3156 // TODO(ahe): It might be faster to check for Array before
3157 // function and bool. 3157 // function and bool.
3158 if (hasArray) { 3158 if (hasArray) {
3159 block.statements.add(buildInterceptorCheck(backend.jsArrayClass)); 3159 block.statements.add(buildInterceptorCheck(backend.jsArrayClass));
3160 } 3160 }
3161 3161
3162 // TODO(ahe): Work with sra@ to integrate this with native interceptors,
3163 // and potentially initialize the dispatch object during finishClasses.
ngeoffray 2013/09/06 06:54:06 Please add a comment on what this is for, and what
ahe 2013/09/09 11:26:29 Done.
3164 block.statements.add(
3165 js.if_(r'typeof receiver == "function" && "builtin$cls" in receiver',
3166 buildReturnInterceptor(backend.jsRuntimeType)));
3167
3168 // TODO(ahe): This should be a constant and we should be able to remove
3169 // this test (so I'm keeping the redundant "object" test).
ngeoffray 2013/09/06 06:54:06 Ditto for having "func"
ahe 2013/09/09 11:26:29 Done.
3170 block.statements.add(
3171 js.if_(r'typeof receiver == "object"'
3172 ' && receiver.constructor === Object'
ngeoffray 2013/09/06 06:54:06 Add a comment on why this constructor check?
ahe 2013/09/09 11:26:29 Done.
3173 ' && "func" in receiver',
3174 buildReturnInterceptor(backend.jsFunctionType)));
3175
3162 if (hasNative) { 3176 if (hasNative) {
3163 block.statements.add( 3177 block.statements.add(
3164 js.if_( 3178 js.if_('typeof receiver != "object"', js.return_('receiver')));
3165 js('(typeof receiver) != "object"'),
3166 js.return_(js('receiver'))));
3167 3179
3168 // if (receiver instanceof $.Object) return receiver; 3180 // if (receiver instanceof $.Object) return receiver;
3169 // return $.getNativeInterceptor(receiver); 3181 // return $.getNativeInterceptor(receiver);
3170 block.statements.add( 3182 block.statements.add(
3171 js.if_(js('receiver instanceof #', 3183 js.if_(js('receiver instanceof #',
3172 js(namer.isolateAccess(compiler.objectClass))), 3184 js(namer.isolateAccess(compiler.objectClass))),
3173 js.return_(js('receiver')))); 3185 js.return_(js('receiver'))));
3174 block.statements.add( 3186 block.statements.add(
3175 js.return_( 3187 js.return_(
3176 js(namer.isolateAccess(backend.getNativeInterceptorMethod))( 3188 js(namer.isolateAccess(backend.getNativeInterceptorMethod))(
(...skipping 1024 matching lines...) Expand 10 before | Expand all | Expand 10 after
4201 4213
4202 const String HOOKS_API_USAGE = """ 4214 const String HOOKS_API_USAGE = """
4203 // The code supports the following hooks: 4215 // The code supports the following hooks:
4204 // dartPrint(message) - if this function is defined it is called 4216 // dartPrint(message) - if this function is defined it is called
4205 // instead of the Dart [print] method. 4217 // instead of the Dart [print] method.
4206 // dartMainRunner(main) - if this function is defined, the Dart [main] 4218 // dartMainRunner(main) - if this function is defined, the Dart [main]
4207 // method will not be invoked directly. 4219 // method will not be invoked directly.
4208 // Instead, a closure that will invoke [main] is 4220 // Instead, a closure that will invoke [main] is
4209 // passed to [dartMainRunner]. 4221 // passed to [dartMainRunner].
4210 """; 4222 """;
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698