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

Unified Diff: runtime/vm/object.h

Issue 11368138: Add some support for the code-point code-unit distinction. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: New version integrates feedback, adds less to standard String class. Created 8 years, 1 month 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
Index: runtime/vm/object.h
diff --git a/runtime/vm/object.h b/runtime/vm/object.h
index 031a8541598da68e52d7e4eba1aefbd5114350b9..f97153561a21dcde18c44aee6e4e5e643f8db5b1 100644
--- a/runtime/vm/object.h
+++ b/runtime/vm/object.h
@@ -17,6 +17,7 @@
#include "vm/os.h"
#include "vm/raw_object.h"
#include "vm/scanner.h"
+#include "vm/unicode.h"
namespace dart {
@@ -3718,7 +3719,11 @@ class String : public Instance {
static intptr_t Hash(const uint16_t* characters, intptr_t len);
static intptr_t Hash(const uint32_t* characters, intptr_t len);
- int32_t CharAt(intptr_t index) const;
+ // Returns the UTF-16 code unit at an index. UTF-16 is a superset of ASCII
+ // so you can always use this if you are looking for ASCII. If you need to
+ // support arbitrary Unicode characters then you should perhaps be using
+ // Utf16::CharCodeAt(string, index) instead.
+ uint32_t CodeUnitAt(intptr_t index) const;
intptr_t CharSize() const;
@@ -3884,7 +3889,7 @@ class String : public Instance {
class OneByteString : public AllStatic {
public:
- static int32_t CharAt(const String& str, intptr_t index) {
+ static uint32_t CodeUnitAt(const String& str, intptr_t index) {
cshapiro 2012/11/15 20:14:51 Why did the signedness of the return type change?
erikcorry 2012/11/15 23:47:05 There is a mixture in the VM of signed and unsigne
return *CharAddr(str, index);
}
@@ -3941,6 +3946,7 @@ class OneByteString : public AllStatic {
static RawOneByteString* Transform(int32_t (*mapping)(int32_t ch),
const String& str,
+ int out_length,
Heap::Space space);
static const ClassId kClassId = kOneByteStringCid;
@@ -3978,7 +3984,7 @@ class OneByteString : public AllStatic {
class TwoByteString : public AllStatic {
public:
- static int32_t CharAt(const String& str, intptr_t index) {
+ static uint32_t CodeUnitAt(const String& str, intptr_t index) {
return *CharAddr(str, index);
}
@@ -4024,6 +4030,7 @@ class TwoByteString : public AllStatic {
static RawTwoByteString* Transform(int32_t (*mapping)(int32_t ch),
const String& str,
+ int out_length,
Heap::Space space);
static RawTwoByteString* null() {
@@ -4062,7 +4069,7 @@ class TwoByteString : public AllStatic {
class ExternalOneByteString : public AllStatic {
public:
- static int32_t CharAt(const String& str, intptr_t index) {
+ static uint32_t CodeUnitAt(const String& str, intptr_t index) {
return *CharAddr(str, index);
}
@@ -4128,7 +4135,7 @@ class ExternalOneByteString : public AllStatic {
class ExternalTwoByteString : public AllStatic {
public:
- static int32_t CharAt(const String& str, intptr_t index) {
+ static uint32_t CodeUnitAt(const String& str, intptr_t index) {
return *CharAddr(str, index);
}
@@ -5904,7 +5911,7 @@ bool String::Equals(const String& str,
return false; // Lengths don't match.
}
for (intptr_t i = 0; i < len; i++) {
- if (this->CharAt(i) != str.CharAt(begin_index + i)) {
+ if (this->CodeUnitAt(i) != str.CodeUnitAt(begin_index + i)) {
return false;
}
}

Powered by Google App Engine
This is Rietveld 408576698