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

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: Implemented feedback from patch set 2. 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..810fedf7044df9a58ca0e96e8ba74e7d20d305af 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 {
@@ -3716,8 +3717,13 @@ class String : public Instance {
static intptr_t Hash(const String& str, intptr_t begin_index, intptr_t len);
static intptr_t Hash(const uint8_t* characters, intptr_t len);
static intptr_t Hash(const uint16_t* characters, intptr_t len);
- static intptr_t Hash(const uint32_t* characters, intptr_t len);
+ static intptr_t Hash(const int32_t* characters, intptr_t len);
+ // Despite the name, this does not return the character. It 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
siva 2012/11/16 22:32:04 Should we say ASCII or Latin1 here?
erikcorry 2012/11/19 12:40:41 Now says both.
+ // arbitrary Unicode characters then you should perhaps be using
+ // Utf16::CharCodeAt(string, index), which returns the full 21 bit code point.
int32_t CharAt(intptr_t index) const;
intptr_t CharSize() const;
@@ -3729,7 +3735,7 @@ class String : public Instance {
bool Equals(const char* str) const;
bool Equals(const uint8_t* characters, intptr_t len) const;
bool Equals(const uint16_t* characters, intptr_t len) const;
- bool Equals(const uint32_t* characters, intptr_t len) const;
+ bool Equals(const int32_t* characters, intptr_t len) const;
virtual bool Equals(const Instance& other) const;
@@ -3780,7 +3786,7 @@ class String : public Instance {
Heap::Space space = Heap::kNew);
// Creates a new String object from an array of UTF-32 encoded characters.
- static RawString* New(const uint32_t* utf32_array,
+ static RawString* New(const int32_t* utf32_array,
intptr_t array_len,
Heap::Space space = Heap::kNew);
@@ -3926,7 +3932,7 @@ class OneByteString : public AllStatic {
static RawOneByteString* New(const uint16_t* characters,
intptr_t len,
Heap::Space space);
- static RawOneByteString* New(const uint32_t* characters,
+ static RawOneByteString* New(const int32_t* characters,
intptr_t len,
Heap::Space space);
static RawOneByteString* New(const String& str,
@@ -3941,6 +3947,7 @@ class OneByteString : public AllStatic {
static RawOneByteString* Transform(int32_t (*mapping)(int32_t ch),
const String& str,
+ int out_length,
siva 2012/11/16 22:32:04 we always use intptr_t for length values in the VM
erikcorry 2012/11/19 12:40:41 Done.
Heap::Space space);
static const ClassId kClassId = kOneByteStringCid;
@@ -4009,7 +4016,7 @@ class TwoByteString : public AllStatic {
intptr_t len,
Heap::Space space);
static RawTwoByteString* New(intptr_t utf16_len,
- const uint32_t* characters,
+ const int32_t* characters,
intptr_t len,
Heap::Space space);
static RawTwoByteString* New(const String& str,
@@ -4024,6 +4031,7 @@ class TwoByteString : public AllStatic {
static RawTwoByteString* Transform(int32_t (*mapping)(int32_t ch),
const String& str,
+ int out_length,
siva 2012/11/16 22:32:04 Ditto.
erikcorry 2012/11/19 12:40:41 Done.
Heap::Space space);
static RawTwoByteString* null() {

Powered by Google App Engine
This is Rietveld 408576698