# HG changeset patch # User Jacob Carlborg # Date 1303052006 -7200 # Node ID b31c27b8e86db0e0cc9d933efdafa916c00bba99 # Parent 46539f5c5993a92f18690c400e95ad25af3fad9d Added Phobos implementation of java.lang.String.firstCodePoint. diff -r 46539f5c5993 -r b31c27b8e86d base/src/java/lang/String.d --- a/base/src/java/lang/String.d Fri Apr 08 20:12:20 2011 +0900 +++ b/base/src/java/lang/String.d Sun Apr 17 16:53:26 2011 +0200 @@ -130,8 +130,16 @@ assert( res.length is 1 ); return res[0]; } else { // Phobos - implMissing( __FILE__, __LINE__ ); - return '\0'; + size_t ate = 0; + auto res = std.utf.decode(str, ate); + + if (ate == 0) + getDwtLogger().trace( __FILE__, __LINE__, "str.length={} str={:X2}", str.length, cast(ubyte[])str ); + + assert(ate > 0); + consumed = ate; + + return res; } } dchar firstCodePoint( CString16 str, out int consumed ){ @@ -147,8 +155,16 @@ assert( res.length is 1 ); return res[0]; } else { // Phobos - implMissing( __FILE__, __LINE__ ); - return '\0'; + size_t ate = 0; + auto res = std.utf.decode(str, ate); + + if (ate == 0) + getDwtLogger().trace( __FILE__, __LINE__, "str.length={} str={:X2}", str.length, cast(ubyte[])str ); + + assert(ate > 0); + consumed = ate; + + return res; } }