| 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('js_helper'); |     5 #library('js_helper'); | 
|     6  |     6  | 
|     7 #import('coreimpl.dart'); |     7 #import('coreimpl.dart'); | 
|     8  |     8  | 
|     9 #source('constant_map.dart'); |     9 #source('constant_map.dart'); | 
|    10 #source('date_helper.dart'); |    10 #source('date_helper.dart'); | 
| (...skipping 1328 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1339   Iterator iterator = keyValuePairs.iterator(); |  1339   Iterator iterator = keyValuePairs.iterator(); | 
|  1340   Map result = new LinkedHashMap(); |  1340   Map result = new LinkedHashMap(); | 
|  1341   while (iterator.hasNext()) { |  1341   while (iterator.hasNext()) { | 
|  1342     String key = iterator.next(); |  1342     String key = iterator.next(); | 
|  1343     var value = iterator.next(); |  1343     var value = iterator.next(); | 
|  1344     result[key] = value; |  1344     result[key] = value; | 
|  1345   } |  1345   } | 
|  1346   return result; |  1346   return result; | 
|  1347 } |  1347 } | 
|  1348  |  1348  | 
 |  1349 invokeClosure(Function closure, | 
 |  1350               var isolate, | 
 |  1351               int numberOfArguments, | 
 |  1352               var arg1, | 
 |  1353               var arg2) { | 
 |  1354   if (numberOfArguments == 0) { | 
 |  1355     return JS_CALL_IN_ISOLATE(isolate, () => closure()); | 
 |  1356   } else if (numberOfArguments == 1) { | 
 |  1357     return JS_CALL_IN_ISOLATE(isolate, () => closure(arg1)); | 
 |  1358   } else if (numberOfArguments == 2) { | 
 |  1359     return JS_CALL_IN_ISOLATE(isolate, () => closure(arg1, arg2)); | 
 |  1360   } else { | 
 |  1361     throw new Exception( | 
 |  1362         'Unsupported number of arguments for wrapped closure'); | 
 |  1363   } | 
 |  1364 } | 
 |  1365  | 
|  1349 /** |  1366 /** | 
|  1350  * Called by generated code to convert a Dart closure to a JS |  1367  * Called by generated code to convert a Dart closure to a JS | 
|  1351  * closure when the Dart closure is passed to the DOM. |  1368  * closure when the Dart closure is passed to the DOM. | 
|  1352  */ |  1369  */ | 
|  1353 convertDartClosureToJS(closure) { |  1370 convertDartClosureToJS(closure) { | 
|  1354   if (closure === null) return null; |  1371   if (closure === null) return null; | 
|  1355   var function = JS('var', @'#.$identity', closure); |  1372   var function = JS('var', @'#.$identity', closure); | 
|  1356   if (JS('bool', @'!!#', function)) return function; |  1373   if (JS('bool', @'!!#', function)) return function; | 
 |  1374  | 
|  1357   function = JS("var", @"""function() { |  1375   function = JS("var", @"""function() { | 
|  1358     var dartClosure = #; |  1376     return #(#, #, arguments.length, arguments[0], arguments[1]); | 
|  1359     switch (arguments.length) { |  | 
|  1360       case 0: return #(dartClosure); |  | 
|  1361       case 1: return #(dartClosure, arguments[0]); |  | 
|  1362       case 2: return #(dartClosure, arguments[0], arguments[1]); |  | 
|  1363       default: |  | 
|  1364         throw new Error('Unsupported number of arguments for wrapped closure'); |  | 
|  1365     } |  | 
|  1366   }""", |  1377   }""", | 
 |  1378   invokeClosure, | 
|  1367   closure, |  1379   closure, | 
|  1368   callClosure0, |  1380   JS_CURRENT_ISOLATE()); | 
|  1369   callClosure1, |  1381  | 
|  1370   callClosure2); |  | 
|  1371   JS('void', @'#.$identity = #', closure, function); |  1382   JS('void', @'#.$identity = #', closure, function); | 
|  1372   return function; |  1383   return function; | 
|  1373 } |  1384 } | 
|  1374  |  1385  | 
|  1375 /** |  1386 /** | 
|  1376  * Helper methods when converting a Dart closure to a JS closure. |  | 
|  1377  */ |  | 
|  1378 callClosure0(closure) => closure(); |  | 
|  1379 callClosure1(closure, arg1) => closure(arg1); |  | 
|  1380 callClosure2(closure, arg1, arg2) => closure(arg1, arg2); |  | 
|  1381  |  | 
|  1382 /** |  | 
|  1383  * Super class for Dart closures. |  1387  * Super class for Dart closures. | 
|  1384  */ |  1388  */ | 
|  1385 class Closure implements Function { |  1389 class Closure implements Function { | 
|  1386   String toString() => "Closure"; |  1390   String toString() => "Closure"; | 
|  1387 } |  1391 } | 
|  1388  |  1392  | 
|  1389 bool jsHasOwnProperty(var jsObject, String property) { |  1393 bool jsHasOwnProperty(var jsObject, String property) { | 
|  1390   return JS('bool', @'#.hasOwnProperty(#)', jsObject, property); |  1394   return JS('bool', @'#.hasOwnProperty(#)', jsObject, property); | 
|  1391 } |  1395 } | 
|  1392  |  1396  | 
|  1393 jsPropertyAccess(var jsObject, String property) { |  1397 jsPropertyAccess(var jsObject, String property) { | 
|  1394   return JS('var', @'#[#]', jsObject, property); |  1398   return JS('var', @'#[#]', jsObject, property); | 
|  1395 } |  1399 } | 
|  1396  |  1400  | 
|  1397 /** |  1401 /** | 
|  1398  * Called at the end of unaborted switch cases to get the singleton |  1402  * Called at the end of unaborted switch cases to get the singleton | 
|  1399  * FallThroughError exception that will be thrown. |  1403  * FallThroughError exception that will be thrown. | 
|  1400  */ |  1404  */ | 
|  1401 getFallThroughError() => const FallThroughError(); |  1405 getFallThroughError() => const FallThroughError(); | 
| OLD | NEW |