Index: sdk/lib/_internal/lib/foreign_helper.dart |
diff --git a/sdk/lib/_internal/lib/foreign_helper.dart b/sdk/lib/_internal/lib/foreign_helper.dart |
deleted file mode 100644 |
index febc75fa8dbe82d4a1ff4f34d91720bf8133c7b4..0000000000000000000000000000000000000000 |
--- a/sdk/lib/_internal/lib/foreign_helper.dart |
+++ /dev/null |
@@ -1,290 +0,0 @@ |
-// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
-// for details. All rights reserved. Use of this source code is governed by a |
-// BSD-style license that can be found in the LICENSE file. |
- |
-library _foreign_helper; |
- |
-/** |
- * Emits a JavaScript code fragment parameterized by arguments. |
- * |
- * Hash characters `#` in the [codeTemplate] are replaced in left-to-right order |
- * with expressions that contain the values of, or evaluate to, the arguments. |
- * The number of hash marks must match the number or arguments. Although |
- * declared with arguments [arg0] through [arg2], the form actually has no limit |
- * on the number of arguments. |
- * |
- * The [typeDescription] argument is interpreted as a description of the |
- * behavior of the JavaScript code. Currently it describes the types that may |
- * be returned by the expression, with the additional behavior that the returned |
- * values may be fresh instances of the types. The type information must be |
- * correct as it is trusted by the compiler in optimizations, and it must be |
- * precise as possible since it is used for native live type analysis to |
- * tree-shake large parts of the DOM libraries. If poorly written, the |
- * [typeDescription] will cause unnecessarily bloated programs. (You can check |
- * for this by compiling with `--verbose`; there is an info message describing |
- * the number of native (DOM) types that can be removed, which usually should be |
- * greater than zero.) |
- * |
- * The [typeDescription] is a [String] which contains a union of types separated |
- * by vertical bar `|` symbols, e.g. `"num|String"` describes the union of |
- * numbers and Strings. There is no type in Dart that is this precise. The |
- * Dart alternative would be `Object` or `dynamic`, but these types imply that |
- * the JS-code might also be creating instances of all the DOM types. If `null` |
- * is possible, it must be specified explicitly, e.g. `"String|Null"`. |
- * [typeDescription] has several extensions to help describe the behavior more |
- * accurately. In addition to the union type already described: |
- * |
- * + `=Object` is a plain JavaScript object. Some DOM methods return instances |
- * that have no corresponing Dart type (e.g. cross-frame documents), |
- * `=Object` can be used to describe these untyped' values. |
- * |
- * + `var` (or empty string). If the entire [typeDescription] is `var` (or |
- * empty string) then the type is `dynamic` but the code is known to not |
- * create any instances. |
- * |
- * Examples: |
- * |
- * // Parent window might be an opaque cross-frame window. |
- * var thing = JS('=Object|Window', '#.parent', myWindow); |
- * |
- * Guidelines: |
- * |
- * + Do not use any parameter, local, method or field names in the |
- * [codeTemplate]. These names are all subject to arbitrary renaming by the |
- * compiler. Pass the values in via `#` substition, and test with the |
- * `--minify` dart2js command-line option. |
- * |
- * + The substituted expressions are values, not locations. |
- * |
- * JS('void', '# += "x"', this.field); |
- * |
- * `this.field` might not be a substituted as a reference to the field. The |
- * generated code might accidentally work as intended, but it also might be |
- * |
- * var t1 = this.field; |
- * t1 += "x"; |
- * |
- * or |
- * |
- * this.get$field() += "x"; |
- * |
- * The remedy in this case is to expand the `+=` operator, leaving all |
- * references to the Dart field as Dart code: |
- * |
- * this.field = JS('String', '# + "x"', this.field); |
- * |
- * + Never use `#` in function bodies. |
- * |
- * This is a variation on the previous guideline. Since `#` is replaced with |
- * an *expression* and the expression is only valid in the immediate context, |
- * `#` should never appear in a function body. Doing so might defer the |
- * evaluation of the expression, and its side effects, until the function is |
- * called. |
- * |
- * For example, |
- * |
- * var value = foo(); |
- * var f = JS('', 'function(){return #}', value) |
- * |
- * might result in no immediate call to `foo` and a call to `foo` on every |
- * call to the JavaScript function bound to `f`. This is better: |
- * |
- * var f = JS('', |
- * '(function(val) { return function(){return val}; })(#)', value); |
- * |
- * Since `#` occurs in the immediately evaluated expression, the expression |
- * is immediately evaluated and bound to `val` in the immediate call. |
- * |
- * |
- * Additional notes. |
- * |
- * In the future we may extend [typeDescription] to include other aspects of the |
- * behavior, for example, separating the returned types from the instantiated |
- * types, or including effects to allow the compiler to perform more |
- * optimizations around the code. This might be an extension of [JS] or a new |
- * function similar to [JS] with additional arguments for the new information. |
- */ |
-// Add additional optional arguments if needed. The method is treated internally |
-// as a variable argument method. |
-JS(String typeDescription, String codeTemplate, |
- [arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11]) |
-{} |
- |
-/** |
- * Returns the isolate in which this code is running. |
- */ |
-IsolateContext JS_CURRENT_ISOLATE_CONTEXT() {} |
- |
-abstract class IsolateContext { |
- /// Holds a (native) JavaScript instance of Isolate, see |
- /// finishIsolateConstructorFunction in emitter.dart. |
- get isolateStatics; |
-} |
- |
-/** |
- * Invokes [function] in the context of [isolate]. |
- */ |
-JS_CALL_IN_ISOLATE(isolate, Function function) {} |
- |
-/** |
- * Converts the Dart closure [function] into a JavaScript closure. |
- * |
- * Warning: This is no different from [RAW_DART_FUNCTION_REF] which means care |
- * must be taken to store the current isolate. |
- */ |
-DART_CLOSURE_TO_JS(Function function) {} |
- |
-/** |
- * Returns a raw reference to the JavaScript function which implements |
- * [function]. |
- * |
- * Warning: this is dangerous, you should probably use |
- * [DART_CLOSURE_TO_JS] instead. The returned object is not a valid |
- * Dart closure, does not store the isolate context or arity. |
- * |
- * A valid example of where this can be used is as the second argument |
- * to V8's Error.captureStackTrace. See |
- * https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi. |
- */ |
-RAW_DART_FUNCTION_REF(Function function) {} |
- |
-/** |
- * Sets the current isolate to [isolate]. |
- */ |
-void JS_SET_CURRENT_ISOLATE(isolate) {} |
- |
-/** |
- * Creates an isolate and returns it. |
- */ |
-JS_CREATE_ISOLATE() {} |
- |
-/** |
- * Returns the JavaScript constructor function for Dart's Object class. |
- * This can be used for type tests, as in |
- * |
- * if (JS('bool', '# instanceof #', obj, JS_DART_OBJECT_CONSTRUCTOR())) |
- * ... |
- */ |
-JS_DART_OBJECT_CONSTRUCTOR() {} |
- |
-/** |
- * Returns the interceptor for class [type]. The interceptor is the type's |
- * constructor's `prototype` property. [type] will typically be the class, not |
- * an interface, e.g. `JS_INTERCEPTOR_CONSTANT(JSInt)`, not |
- * `JS_INTERCEPTOR_CONSTANT(int)`. |
- */ |
-JS_INTERCEPTOR_CONSTANT(Type type) {} |
- |
-/** |
- * Returns the prefix used for generated is checks on classes. |
- */ |
-String JS_OPERATOR_IS_PREFIX() {} |
- |
-/** |
- * Returns the prefix used for generated type argument substitutions on classes. |
- */ |
-String JS_OPERATOR_AS_PREFIX() {} |
- |
-/// Returns the name of the class `Object` in the generated code. |
-String JS_OBJECT_CLASS_NAME() {} |
- |
-/// Returns the name of the class `Null` in the generated code. |
-String JS_NULL_CLASS_NAME() {} |
- |
-/// Returns the name of the class `Function` in the generated code. |
-String JS_FUNCTION_CLASS_NAME() {} |
- |
-/** |
- * Returns the field name used for determining if an object or its |
- * interceptor has JavaScript indexing behavior. |
- */ |
-String JS_IS_INDEXABLE_FIELD_NAME() {} |
- |
-/** |
- * Returns the object corresponding to Namer.CURRENT_ISOLATE. |
- */ |
-JS_CURRENT_ISOLATE() {} |
- |
-/// Returns the name used for generated function types on classes and methods. |
-String JS_SIGNATURE_NAME() {} |
- |
-/// Returns the name used to tag function type representations in JavaScript. |
-String JS_FUNCTION_TYPE_TAG() {} |
- |
-/** |
- * Returns the name used to tag void return in function type representations |
- * in JavaScript. |
- */ |
-String JS_FUNCTION_TYPE_VOID_RETURN_TAG() {} |
- |
-/** |
- * Returns the name used to tag return types in function type representations |
- * in JavaScript. |
- */ |
-String JS_FUNCTION_TYPE_RETURN_TYPE_TAG() {} |
- |
-/** |
- * Returns the name used to tag required parameters in function type |
- * representations in JavaScript. |
- */ |
-String JS_FUNCTION_TYPE_REQUIRED_PARAMETERS_TAG() {} |
- |
-/** |
- * Returns the name used to tag optional parameters in function type |
- * representations in JavaScript. |
- */ |
-String JS_FUNCTION_TYPE_OPTIONAL_PARAMETERS_TAG() {} |
- |
-/** |
- * Returns the name used to tag named parameters in function type |
- * representations in JavaScript. |
- */ |
-String JS_FUNCTION_TYPE_NAMED_PARAMETERS_TAG() {} |
- |
-/** |
- * Obtain [name] from Namer. |
- */ |
-String JS_GET_NAME(String name) {} |
- |
-/// Returns the state of a flag that is determined by the state of the compiler |
-/// when the program has been analyzed. |
-bool JS_GET_FLAG(String name) {} |
- |
-/** |
- * Pretend [code] is executed. Generates no executable code. This is used to |
- * model effects at some other point in external code. For example, the |
- * following models an assignment to foo with an unknown value. |
- * |
- * var foo; |
- * |
- * main() { |
- * JS_EFFECT((_){ foo = _; }) |
- * } |
- * |
- * TODO(sra): Replace this hack with something to mark the volatile or |
- * externally initialized elements. |
- */ |
-void JS_EFFECT(Function code) { code(null); } |
- |
-/** |
- * Use this class for creating constants that hold JavaScript code. |
- * For example: |
- * |
- * const constant = JS_CONST('typeof window != "undefined"); |
- * |
- * This code will generate: |
- * $.JS_CONST_1 = typeof window != "undefined"; |
- */ |
-class JS_CONST { |
- final String code; |
- const JS_CONST(this.code); |
-} |
- |
-/** |
- * JavaScript string concatenation. Inputs must be Strings. Corresponds to the |
- * HStringConcat SSA instruction and may be constant-folded. |
- */ |
-String JS_STRING_CONCAT(String a, String b) { |
- // This body is unused, only here for type analysis. |
- return JS('String', '# + #', a, b); |
-} |