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

Unified Diff: test/codegen/expect/collection/src/comparators.js

Issue 1492523004: Fixes #378 (Closed) Base URL: https://github.com/dart-lang/dev_compiler.git@master
Patch Set: Use virtual fields for extension fields Created 5 years 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « lib/src/codegen/js_field_storage.dart ('k') | test/codegen/expect/collection/src/comparators.txt » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: test/codegen/expect/collection/src/comparators.js
diff --git a/test/codegen/expect/collection/src/comparators.js b/test/codegen/expect/collection/src/comparators.js
new file mode 100644
index 0000000000000000000000000000000000000000..57a1cec2fe1ef53f6e9651bb71659817a2f9fccb
--- /dev/null
+++ b/test/codegen/expect/collection/src/comparators.js
@@ -0,0 +1,299 @@
+dart_library.library('collection/src/comparators', null, /* Imports */[
+ "dart/_runtime",
+ 'dart/core'
+], /* Lazy imports */[
+], function(exports, dart, core) {
+ 'use strict';
+ let dartx = dart.dartx;
+ const _zero = 48;
+ const _upperCaseA = 65;
+ const _upperCaseZ = 90;
+ const _lowerCaseA = 97;
+ const _lowerCaseZ = 122;
+ const _asciiCaseBit = 32;
+ function equalsIgnoreAsciiCase(a, b) {
+ if (a[dartx.length] != b[dartx.length])
+ return false;
+ for (let i = 0; dart.notNull(i) < dart.notNull(a[dartx.length]); i = dart.notNull(i) + 1) {
+ let aChar = a[dartx.codeUnitAt](i);
+ let bChar = b[dartx.codeUnitAt](i);
+ if (aChar == bChar)
+ continue;
+ if ((dart.notNull(aChar) ^ dart.notNull(bChar)) != _asciiCaseBit)
+ return false;
+ let aCharUpperCase = dart.notNull(aChar) | dart.notNull(_asciiCaseBit);
+ if (dart.notNull(_upperCaseA) <= dart.notNull(aCharUpperCase) && dart.notNull(aCharUpperCase) <= dart.notNull(_upperCaseZ)) {
+ continue;
+ }
+ return false;
+ }
+ return true;
+ }
+ dart.fn(equalsIgnoreAsciiCase, core.bool, [core.String, core.String]);
+ function hashIgnoreAsciiCase(string) {
+ let hash = 0;
+ for (let i = 0; dart.notNull(i) < dart.notNull(string[dartx.length]); i = dart.notNull(i) + 1) {
+ let char = string[dartx.codeUnitAt](i);
+ if (dart.notNull(_lowerCaseA) <= dart.notNull(char) && dart.notNull(char) <= dart.notNull(_lowerCaseZ)) {
+ char = dart.notNull(char) - dart.notNull(_asciiCaseBit);
+ }
+ hash = 536870911 & dart.notNull(hash) + dart.notNull(char);
+ hash = 536870911 & dart.notNull(hash) + ((524287 & dart.notNull(hash)) << 10);
+ hash = dart.notNull(hash) >> 6;
+ }
+ hash = 536870911 & dart.notNull(hash) + ((67108863 & dart.notNull(hash)) << 3);
+ hash = dart.notNull(hash) >> 11;
+ return 536870911 & dart.notNull(hash) + ((16383 & dart.notNull(hash)) << 15);
+ }
+ dart.fn(hashIgnoreAsciiCase, core.int, [core.String]);
+ function compareAsciiUpperCase(a, b) {
+ let defaultResult = 0;
+ for (let i = 0; dart.notNull(i) < dart.notNull(a[dartx.length]); i = dart.notNull(i) + 1) {
+ if (dart.notNull(i) >= dart.notNull(b[dartx.length]))
+ return 1;
+ let aChar = a[dartx.codeUnitAt](i);
+ let bChar = b[dartx.codeUnitAt](i);
+ if (aChar == bChar)
+ continue;
+ let aUpperCase = aChar;
+ let bUpperCase = bChar;
+ if (dart.notNull(_lowerCaseA) <= dart.notNull(aChar) && dart.notNull(aChar) <= dart.notNull(_lowerCaseZ)) {
+ aUpperCase = dart.notNull(aUpperCase) - dart.notNull(_asciiCaseBit);
+ }
+ if (dart.notNull(_lowerCaseA) <= dart.notNull(bChar) && dart.notNull(bChar) <= dart.notNull(_lowerCaseZ)) {
+ bUpperCase = dart.notNull(bUpperCase) - dart.notNull(_asciiCaseBit);
+ }
+ if (aUpperCase != bUpperCase)
+ return (dart.notNull(aUpperCase) - dart.notNull(bUpperCase))[dartx.sign];
+ if (defaultResult == 0)
+ defaultResult = dart.notNull(aChar) - dart.notNull(bChar);
+ }
+ if (dart.notNull(b[dartx.length]) > dart.notNull(a[dartx.length]))
+ return -1;
+ return defaultResult[dartx.sign];
+ }
+ dart.fn(compareAsciiUpperCase, core.int, [core.String, core.String]);
+ function compareAsciiLowerCase(a, b) {
+ let defaultResult = 0;
+ for (let i = 0; dart.notNull(i) < dart.notNull(a[dartx.length]); i = dart.notNull(i) + 1) {
+ if (dart.notNull(i) >= dart.notNull(b[dartx.length]))
+ return 1;
+ let aChar = a[dartx.codeUnitAt](i);
+ let bChar = b[dartx.codeUnitAt](i);
+ if (aChar == bChar)
+ continue;
+ let aLowerCase = aChar;
+ let bLowerCase = bChar;
+ if (dart.notNull(_upperCaseA) <= dart.notNull(bChar) && dart.notNull(bChar) <= dart.notNull(_upperCaseZ)) {
+ bLowerCase = dart.notNull(bLowerCase) + dart.notNull(_asciiCaseBit);
+ }
+ if (dart.notNull(_upperCaseA) <= dart.notNull(aChar) && dart.notNull(aChar) <= dart.notNull(_upperCaseZ)) {
+ aLowerCase = dart.notNull(aLowerCase) + dart.notNull(_asciiCaseBit);
+ }
+ if (aLowerCase != bLowerCase)
+ return (dart.notNull(aLowerCase) - dart.notNull(bLowerCase))[dartx.sign];
+ if (defaultResult == 0)
+ defaultResult = dart.notNull(aChar) - dart.notNull(bChar);
+ }
+ if (dart.notNull(b[dartx.length]) > dart.notNull(a[dartx.length]))
+ return -1;
+ return defaultResult[dartx.sign];
+ }
+ dart.fn(compareAsciiLowerCase, core.int, [core.String, core.String]);
+ function compareNatural(a, b) {
+ for (let i = 0; dart.notNull(i) < dart.notNull(a[dartx.length]); i = dart.notNull(i) + 1) {
+ if (dart.notNull(i) >= dart.notNull(b[dartx.length]))
+ return 1;
+ let aChar = a[dartx.codeUnitAt](i);
+ let bChar = b[dartx.codeUnitAt](i);
+ if (aChar != bChar) {
+ return _compareNaturally(a, b, i, aChar, bChar);
+ }
+ }
+ if (dart.notNull(b[dartx.length]) > dart.notNull(a[dartx.length]))
+ return -1;
+ return 0;
+ }
+ dart.fn(compareNatural, core.int, [core.String, core.String]);
+ function compareAsciiLowerCaseNatural(a, b) {
+ let defaultResult = 0;
+ for (let i = 0; dart.notNull(i) < dart.notNull(a[dartx.length]); i = dart.notNull(i) + 1) {
+ if (dart.notNull(i) >= dart.notNull(b[dartx.length]))
+ return 1;
+ let aChar = a[dartx.codeUnitAt](i);
+ let bChar = b[dartx.codeUnitAt](i);
+ if (aChar == bChar)
+ continue;
+ let aLowerCase = aChar;
+ let bLowerCase = bChar;
+ if (dart.notNull(_upperCaseA) <= dart.notNull(aChar) && dart.notNull(aChar) <= dart.notNull(_upperCaseZ)) {
+ aLowerCase = dart.notNull(aLowerCase) + dart.notNull(_asciiCaseBit);
+ }
+ if (dart.notNull(_upperCaseA) <= dart.notNull(bChar) && dart.notNull(bChar) <= dart.notNull(_upperCaseZ)) {
+ bLowerCase = dart.notNull(bLowerCase) + dart.notNull(_asciiCaseBit);
+ }
+ if (aLowerCase != bLowerCase) {
+ return _compareNaturally(a, b, i, aLowerCase, bLowerCase);
+ }
+ if (defaultResult == 0)
+ defaultResult = dart.notNull(aChar) - dart.notNull(bChar);
+ }
+ if (dart.notNull(b[dartx.length]) > dart.notNull(a[dartx.length]))
+ return -1;
+ return defaultResult[dartx.sign];
+ }
+ dart.fn(compareAsciiLowerCaseNatural, core.int, [core.String, core.String]);
+ function compareAsciiUpperCaseNatural(a, b) {
+ let defaultResult = 0;
+ for (let i = 0; dart.notNull(i) < dart.notNull(a[dartx.length]); i = dart.notNull(i) + 1) {
+ if (dart.notNull(i) >= dart.notNull(b[dartx.length]))
+ return 1;
+ let aChar = a[dartx.codeUnitAt](i);
+ let bChar = b[dartx.codeUnitAt](i);
+ if (aChar == bChar)
+ continue;
+ let aUpperCase = aChar;
+ let bUpperCase = bChar;
+ if (dart.notNull(_lowerCaseA) <= dart.notNull(aChar) && dart.notNull(aChar) <= dart.notNull(_lowerCaseZ)) {
+ aUpperCase = dart.notNull(aUpperCase) - dart.notNull(_asciiCaseBit);
+ }
+ if (dart.notNull(_lowerCaseA) <= dart.notNull(bChar) && dart.notNull(bChar) <= dart.notNull(_lowerCaseZ)) {
+ bUpperCase = dart.notNull(bUpperCase) - dart.notNull(_asciiCaseBit);
+ }
+ if (aUpperCase != bUpperCase) {
+ return _compareNaturally(a, b, i, aUpperCase, bUpperCase);
+ }
+ if (defaultResult == 0)
+ defaultResult = dart.notNull(aChar) - dart.notNull(bChar);
+ }
+ if (dart.notNull(b[dartx.length]) > dart.notNull(a[dartx.length]))
+ return -1;
+ return defaultResult[dartx.sign];
+ }
+ dart.fn(compareAsciiUpperCaseNatural, core.int, [core.String, core.String]);
+ function _compareNaturally(a, b, index, aChar, bChar) {
+ dart.assert(aChar != bChar);
+ let aIsDigit = _isDigit(aChar);
+ let bIsDigit = _isDigit(bChar);
+ if (dart.notNull(aIsDigit)) {
+ if (dart.notNull(bIsDigit)) {
+ return _compareNumerically(a, b, aChar, bChar, index);
+ } else if (dart.notNull(index) > 0 && dart.notNull(_isDigit(a[dartx.codeUnitAt](dart.notNull(index) - 1)))) {
+ return 1;
+ }
+ } else if (dart.notNull(bIsDigit) && dart.notNull(index) > 0 && dart.notNull(_isDigit(b[dartx.codeUnitAt](dart.notNull(index) - 1)))) {
+ return -1;
+ }
+ return (dart.notNull(aChar) - dart.notNull(bChar))[dartx.sign];
+ }
+ dart.fn(_compareNaturally, core.int, [core.String, core.String, core.int, core.int, core.int]);
+ function _compareNumerically(a, b, aChar, bChar, index) {
+ if (dart.notNull(_isNonZeroNumberSuffix(a, index))) {
+ let result = _compareDigitCount(a, b, index, index);
+ if (result != 0)
+ return result;
+ return (dart.notNull(aChar) - dart.notNull(bChar))[dartx.sign];
+ }
+ let aIndex = index;
+ let bIndex = index;
+ if (aChar == _zero) {
+ do {
+ aIndex = dart.notNull(aIndex) + 1;
+ if (aIndex == a[dartx.length])
+ return -1;
+ aChar = a[dartx.codeUnitAt](aIndex);
+ } while (aChar == _zero);
+ if (!dart.notNull(_isDigit(aChar)))
+ return -1;
+ } else if (bChar == _zero) {
+ do {
+ bIndex = dart.notNull(bIndex) + 1;
+ if (bIndex == b[dartx.length])
+ return 1;
+ bChar = b[dartx.codeUnitAt](bIndex);
+ } while (bChar == _zero);
+ if (!dart.notNull(_isDigit(bChar)))
+ return 1;
+ }
+ if (aChar != bChar) {
+ let result = _compareDigitCount(a, b, aIndex, bIndex);
+ if (result != 0)
+ return result;
+ return (dart.notNull(aChar) - dart.notNull(bChar))[dartx.sign];
+ }
+ while (true) {
+ let aIsDigit = false;
+ let bIsDigit = false;
+ aChar = 0;
+ bChar = 0;
+ if ((aIndex = dart.notNull(aIndex) + 1) < dart.notNull(a[dartx.length])) {
+ aChar = a[dartx.codeUnitAt](aIndex);
+ aIsDigit = _isDigit(aChar);
+ }
+ if ((bIndex = dart.notNull(bIndex) + 1) < dart.notNull(b[dartx.length])) {
+ bChar = b[dartx.codeUnitAt](bIndex);
+ bIsDigit = _isDigit(bChar);
+ }
+ if (dart.notNull(aIsDigit)) {
+ if (dart.notNull(bIsDigit)) {
+ if (aChar == bChar)
+ continue;
+ break;
+ }
+ return 1;
+ } else if (dart.notNull(bIsDigit)) {
+ return -1;
+ } else {
+ return (dart.notNull(aIndex) - dart.notNull(bIndex))[dartx.sign];
+ }
+ }
+ let result = _compareDigitCount(a, b, aIndex, bIndex);
+ if (result != 0)
+ return result;
+ return (dart.notNull(aChar) - dart.notNull(bChar))[dartx.sign];
+ }
+ dart.fn(_compareNumerically, core.int, [core.String, core.String, core.int, core.int, core.int]);
+ function _compareDigitCount(a, b, i, j) {
+ while ((i = dart.notNull(i) + 1) < dart.notNull(a[dartx.length])) {
+ let aIsDigit = _isDigit(a[dartx.codeUnitAt](i));
+ if ((j = dart.notNull(j) + 1) == b[dartx.length])
+ return dart.notNull(aIsDigit) ? 1 : 0;
+ let bIsDigit = _isDigit(b[dartx.codeUnitAt](j));
+ if (dart.notNull(aIsDigit)) {
+ if (dart.notNull(bIsDigit))
+ continue;
+ return 1;
+ } else if (dart.notNull(bIsDigit)) {
+ return -1;
+ } else {
+ return 0;
+ }
+ }
+ if ((j = dart.notNull(j) + 1) < dart.notNull(b[dartx.length]) && dart.notNull(_isDigit(b[dartx.codeUnitAt](j)))) {
+ return -1;
+ }
+ return 0;
+ }
+ dart.fn(_compareDigitCount, core.int, [core.String, core.String, core.int, core.int]);
+ function _isDigit(charCode) {
+ return (dart.notNull(charCode) ^ dart.notNull(_zero)) <= 9;
+ }
+ dart.fn(_isDigit, core.bool, [core.int]);
+ function _isNonZeroNumberSuffix(string, index) {
+ while ((index = dart.notNull(index) - 1) >= 0) {
+ let char = string[dartx.codeUnitAt](index);
+ if (char != _zero)
+ return _isDigit(char);
+ }
+ return false;
+ }
+ dart.fn(_isNonZeroNumberSuffix, core.bool, [core.String, core.int]);
+ // Exports:
+ exports.equalsIgnoreAsciiCase = equalsIgnoreAsciiCase;
+ exports.hashIgnoreAsciiCase = hashIgnoreAsciiCase;
+ exports.compareAsciiUpperCase = compareAsciiUpperCase;
+ exports.compareAsciiLowerCase = compareAsciiLowerCase;
+ exports.compareNatural = compareNatural;
+ exports.compareAsciiLowerCaseNatural = compareAsciiLowerCaseNatural;
+ exports.compareAsciiUpperCaseNatural = compareAsciiUpperCaseNatural;
+});
« no previous file with comments | « lib/src/codegen/js_field_storage.dart ('k') | test/codegen/expect/collection/src/comparators.txt » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698