| OLD | NEW |
| 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 library _foreign_helper; | 5 library _foreign_helper; |
| 6 | 6 |
| 7 import 'dart:_js_embedded_names' show JsGetName, JsBuiltin; | 7 import 'dart:_js_embedded_names' show JsGetName; |
| 8 | 8 |
| 9 /** | 9 /** |
| 10 * Emits a JavaScript code fragment parameterized by arguments. | 10 * Emits a JavaScript code fragment parameterized by arguments. |
| 11 * | 11 * |
| 12 * Hash characters `#` in the [codeTemplate] are replaced in left-to-right order | 12 * Hash characters `#` in the [codeTemplate] are replaced in left-to-right order |
| 13 * with expressions that contain the values of, or evaluate to, the arguments. | 13 * with expressions that contain the values of, or evaluate to, the arguments. |
| 14 * The number of hash marks must match the number or arguments. Although | 14 * The number of hash marks must match the number or arguments. Although |
| 15 * declared with arguments [arg0] through [arg2], the form actually has no limit | 15 * declared with arguments [arg0] through [arg2], the form actually has no limit |
| 16 * on the number of arguments. | 16 * on the number of arguments. |
| 17 * | 17 * |
| (...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 183 * https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi. | 183 * https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi. |
| 184 */ | 184 */ |
| 185 RAW_DART_FUNCTION_REF(Function function) {} | 185 RAW_DART_FUNCTION_REF(Function function) {} |
| 186 | 186 |
| 187 /** | 187 /** |
| 188 * Sets the current isolate to [isolate]. | 188 * Sets the current isolate to [isolate]. |
| 189 */ | 189 */ |
| 190 void JS_SET_CURRENT_ISOLATE(isolate) {} | 190 void JS_SET_CURRENT_ISOLATE(isolate) {} |
| 191 | 191 |
| 192 /** | 192 /** |
| 193 * Returns the JavaScript constructor function for Dart's Object class. |
| 194 * This can be used for type tests, as in |
| 195 * |
| 196 * if (JS('bool', '# instanceof #', obj, JS_DART_OBJECT_CONSTRUCTOR())) |
| 197 * ... |
| 198 */ |
| 199 JS_DART_OBJECT_CONSTRUCTOR() {} |
| 200 |
| 201 /** |
| 193 * Returns the interceptor for class [type]. The interceptor is the type's | 202 * Returns the interceptor for class [type]. The interceptor is the type's |
| 194 * constructor's `prototype` property. [type] will typically be the class, not | 203 * constructor's `prototype` property. [type] will typically be the class, not |
| 195 * an interface, e.g. `JS_INTERCEPTOR_CONSTANT(JSInt)`, not | 204 * an interface, e.g. `JS_INTERCEPTOR_CONSTANT(JSInt)`, not |
| 196 * `JS_INTERCEPTOR_CONSTANT(int)`. | 205 * `JS_INTERCEPTOR_CONSTANT(int)`. |
| 197 */ | 206 */ |
| 198 JS_INTERCEPTOR_CONSTANT(Type type) {} | 207 JS_INTERCEPTOR_CONSTANT(Type type) {} |
| 199 | 208 |
| 200 /** | 209 /** |
| 201 * Returns the prefix used for generated is checks on classes. | 210 * Returns the prefix used for generated is checks on classes. |
| 202 */ | 211 */ |
| 203 String JS_OPERATOR_IS_PREFIX() {} | 212 String JS_OPERATOR_IS_PREFIX() {} |
| 204 | 213 |
| 205 /** | 214 /** |
| 206 * Returns the prefix used for generated type argument substitutions on classes. | 215 * Returns the prefix used for generated type argument substitutions on classes. |
| 207 */ | 216 */ |
| 208 String JS_OPERATOR_AS_PREFIX() {} | 217 String JS_OPERATOR_AS_PREFIX() {} |
| 209 | 218 |
| 210 /// Returns the name of the class `Object` in the generated code. | 219 /// Returns the name of the class `Object` in the generated code. |
| 211 String JS_OBJECT_CLASS_NAME() {} | 220 String JS_OBJECT_CLASS_NAME() {} |
| 212 | 221 |
| 213 /// Returns the name of the class `Null` in the generated code. | 222 /// Returns the name of the class `Null` in the generated code. |
| 214 String JS_NULL_CLASS_NAME() {} | 223 String JS_NULL_CLASS_NAME() {} |
| 215 | 224 |
| 225 /// Returns the name of the class `Function` in the generated code. |
| 226 String JS_FUNCTION_CLASS_NAME() {} |
| 227 |
| 216 /** | 228 /** |
| 217 * Returns the field name used for determining if an object or its | 229 * Returns the field name used for determining if an object or its |
| 218 * interceptor has JavaScript indexing behavior. | 230 * interceptor has JavaScript indexing behavior. |
| 219 */ | 231 */ |
| 220 String JS_IS_INDEXABLE_FIELD_NAME() {} | 232 String JS_IS_INDEXABLE_FIELD_NAME() {} |
| 221 | 233 |
| 222 /** | 234 /** |
| 223 * Returns the object corresponding to Namer.CURRENT_ISOLATE. | 235 * Returns the object corresponding to Namer.CURRENT_ISOLATE. |
| 224 */ | 236 */ |
| 225 JS_CURRENT_ISOLATE() {} | 237 JS_CURRENT_ISOLATE() {} |
| 226 | 238 |
| 227 /// Returns the name used for generated function types on classes and methods. | 239 /// Returns the name used for generated function types on classes and methods. |
| 228 String JS_SIGNATURE_NAME() {} | 240 String JS_SIGNATURE_NAME() {} |
| 229 | 241 |
| 230 /// Returns the name used to tag typedefs. | 242 /// Returns the name used to tag typedefs. |
| 231 String JS_TYPEDEF_TAG() {} | 243 String JS_TYPEDEF_TAG() {} |
| 232 | 244 |
| 245 /// Returns the name used to tag function type representations in JavaScript. |
| 246 String JS_FUNCTION_TYPE_TAG() {} |
| 247 |
| 233 /** | 248 /** |
| 234 * Returns the name used to tag void return in function type representations | 249 * Returns the name used to tag void return in function type representations |
| 235 * in JavaScript. | 250 * in JavaScript. |
| 236 */ | 251 */ |
| 237 String JS_FUNCTION_TYPE_VOID_RETURN_TAG() {} | 252 String JS_FUNCTION_TYPE_VOID_RETURN_TAG() {} |
| 238 | 253 |
| 239 /** | 254 /** |
| 240 * Returns the name used to tag return types in function type representations | 255 * Returns the name used to tag return types in function type representations |
| 241 * in JavaScript. | 256 * in JavaScript. |
| 242 */ | 257 */ |
| (...skipping 18 matching lines...) Expand all Loading... |
| 261 String JS_FUNCTION_TYPE_NAMED_PARAMETERS_TAG() {} | 276 String JS_FUNCTION_TYPE_NAMED_PARAMETERS_TAG() {} |
| 262 | 277 |
| 263 /// Returns the JS name for [name] from the Namer. | 278 /// Returns the JS name for [name] from the Namer. |
| 264 String JS_GET_NAME(JsGetName name) {} | 279 String JS_GET_NAME(JsGetName name) {} |
| 265 | 280 |
| 266 /// Reads an embedded global. | 281 /// Reads an embedded global. |
| 267 /// | 282 /// |
| 268 /// The [name] should be a constant defined in the `_embedded_names` library. | 283 /// The [name] should be a constant defined in the `_embedded_names` library. |
| 269 JS_EMBEDDED_GLOBAL(String typeDescription, String name) {} | 284 JS_EMBEDDED_GLOBAL(String typeDescription, String name) {} |
| 270 | 285 |
| 271 /// Instructs the compiler to execute the [builtinName] action at the call-site. | |
| 272 /// | |
| 273 /// The [builtin] should be a constant defined in the `_embedded_names` | |
| 274 /// library. | |
| 275 // Add additional optional arguments if needed. The method is treated internally | |
| 276 // as a variable argument method. | |
| 277 JS_BUILTIN(String typeDescription, JsBuiltin builtin, | |
| 278 [arg0, arg1, arg2, arg3, arg4, arg5, arg6, | |
| 279 arg7, arg8, arg9, arg10, arg11]) {} | |
| 280 | |
| 281 /// Returns the state of a flag that is determined by the state of the compiler | 286 /// Returns the state of a flag that is determined by the state of the compiler |
| 282 /// when the program has been analyzed. | 287 /// when the program has been analyzed. |
| 283 bool JS_GET_FLAG(String name) {} | 288 bool JS_GET_FLAG(String name) {} |
| 284 | 289 |
| 285 /** | 290 /** |
| 286 * Pretend [code] is executed. Generates no executable code. This is used to | 291 * Pretend [code] is executed. Generates no executable code. This is used to |
| 287 * model effects at some other point in external code. For example, the | 292 * model effects at some other point in external code. For example, the |
| 288 * following models an assignment to foo with an unknown value. | 293 * following models an assignment to foo with an unknown value. |
| 289 * | 294 * |
| 290 * var foo; | 295 * var foo; |
| (...skipping 22 matching lines...) Expand all Loading... |
| 313 } | 318 } |
| 314 | 319 |
| 315 /** | 320 /** |
| 316 * JavaScript string concatenation. Inputs must be Strings. Corresponds to the | 321 * JavaScript string concatenation. Inputs must be Strings. Corresponds to the |
| 317 * HStringConcat SSA instruction and may be constant-folded. | 322 * HStringConcat SSA instruction and may be constant-folded. |
| 318 */ | 323 */ |
| 319 String JS_STRING_CONCAT(String a, String b) { | 324 String JS_STRING_CONCAT(String a, String b) { |
| 320 // This body is unused, only here for type analysis. | 325 // This body is unused, only here for type analysis. |
| 321 return JS('String', '# + #', a, b); | 326 return JS('String', '# + #', a, b); |
| 322 } | 327 } |
| OLD | NEW |