pos += 1
end
end
- return nns.to_s_with_length(mlen)
+ return nns.to_s_unsafe(mlen, copy=false)
end
end
end
i += 1
end
- return ns.to_s_with_length(sl)
+ return ns.to_s_unsafe(sl, copy=false)
end
end
if b == null then return '�'
bf[i] = b
end
- return bf.to_s_with_length(ln)[0]
+ return bf.to_s_unsafe(ln, copy=false)[0]
end
if kind == kind_string then return stream.read_block
if kind == kind_c_string then return stream.read_block.to_cstring
# Get an UTF8 encoded `char*` copy of `self`
fun utf8_string: CString in "ObjC" `{ return (char *)[self UTF8String]; `}
- redef fun to_s do return utf8_string.to_s_with_copy
+ redef fun to_s do return utf8_string.to_s
end
redef class CString
# Number of bytes containted in `self`
fun length: Int in "ObjC" `{ return self.length; `}
- redef fun to_s do return bytes.to_s_with_copy_and_length(length)
+ redef fun to_s do return bytes.to_s_with_length(length)
end
# Error condition
redef fun to_s do
persisted = true
var b = self
- var r = b.items.to_s_with_length(length)
+ var r = b.items.to_s_unsafe(length, copy=false)
if r != items then persisted = false
return r
end
end
redef fun decode_string(ns, len) do
- var ret = ns.to_s_with_length(len)
+ var ret = ns.to_s_unsafe(len, copy=false)
var rit = ret.as(FlatString).items
if rit == ns then
var nns = new CString(len)
rit.copy_to(nns, len, 0, 0)
- return nns.to_s_full(ret.byte_length, ret.length)
+ return nns.to_s_unsafe(ret.byte_length, ret.length, copy=false)
end
return ret
end
# readdir cannot fail, so null means end of list
break
end
- var name = de.to_s_with_copy
+ var name = de.to_s
if name == "." or name == ".." then continue
res.add self / name
end
fun realpath: String do
var cs = to_cstring.file_realpath
assert file_exists
- var res = cs.to_s_with_copy
+ var res = cs.to_s
cs.free
return res
end
loop
var de = d.readdir
if de.address_is_null then break
- var name = de.to_s_with_copy
+ var name = de.to_s
if name == "." or name == ".." then continue
res.add name
end
var ns = new CString(nslen + 1)
ns[nslen] = 0u8
native_to_s(ns, nslen + 1)
- return ns.to_s_with_length(nslen)
+ return ns.to_s_unsafe(nslen, copy=false)
end
end
var ns = new CString(nslen + 1)
ns[nslen] = 0u8
native_to_s(ns, nslen + 1)
- return ns.to_s_with_length(nslen)
+ return ns.to_s_unsafe(nslen, copy=false)
end
end
var ns = new CString(nslen + 1)
ns[nslen] = 0u8
native_to_s(ns, nslen + 1)
- return ns.to_s_with_length(nslen)
+ return ns.to_s_unsafe(nslen, copy=false)
end
end
var ns = new CString(nslen + 1)
ns[nslen] = 0u8
native_to_s(ns, nslen + 1)
- return ns.to_s_with_length(nslen)
+ return ns.to_s_unsafe(nslen, copy=false)
end
end
var ns = new CString(nslen + 1)
ns[nslen] = 0u8
native_to_s(ns, nslen + 1)
- return ns.to_s_with_length(nslen)
+ return ns.to_s_unsafe(nslen, copy=false)
end
end
var error_cstr = native.regerror(res)
# We leave it to the lib to decide how to allocate the string that we keep
- var error_str = error_cstr.to_s_with_copy
+ var error_str = error_cstr.to_s
error_cstr.free
return new Error(error_str)
var error_cstr = native.regerror(errcode)
# We leave it to the lib to decide how to allocate the string that we keep
- var error_str = error_cstr.to_s_with_copy
+ var error_str = error_cstr.to_s
error_cstr.free
return error_str
# Actually execute
var cstr = text.to_cstring
- var rets = cstr.to_s_with_length(text.byte_length)
+ var rets = cstr.to_s_unsafe(text.byte_length, copy=false)
var bytefrom = cstr.char_to_byte_index_cached(charfrom, 0, 0)
var subcstr = cstr.fast_cstring(bytefrom)
var eflags = gather_eflags
# Actually execute
var cstr = text.to_cstring
var subcstr = cstr
- var rets = cstr.to_s_with_length(text.byte_length)
+ var rets = cstr.to_s_unsafe(text.byte_length, copy=false)
var eflags = gather_eflags
var eflags_or_notbol = eflags | flag_notbol
var native_match = self.native_match
l += 1
end
- return buf.to_s_unsafe(l)
+ return buf.to_s_unsafe(l, copy=false)
end
# Escape the characters `<`, `>`, `&`, `"`, `'` and `/` as HTML/XML entity references.
#
# var ns = new CString(8)
# "Text is String".copy_to_native(ns, 8, 2, 0)
- # assert ns.to_s_unsafe(8) == "xt is St"
+ # assert ns.to_s_with_length(8) == "xt is St"
#
fun copy_to_native(dest: CString, n, src_offset, dest_offset: Int) do
var mypos = src_offset
var ns = new CString(nslen + 1)
ns[nslen] = 0u8
native_byte_to_s(ns, nslen + 1)
- return ns.to_s_unsafe(nslen)
+ return ns.to_s_unsafe(nslen, copy=false, clean=false)
end
end
var ln = u8char_len
var ns = new CString(ln + 1)
u8char_tos(ns, ln)
- return ns.to_s_unsafe(ln)
+ return ns.to_s_unsafe(ln, copy=false, clean=false)
end
# Returns `self` escaped to UTF-16
end
pos += 1
end
- return nns.to_s_unsafe(nlen)
+ return nns.to_s_unsafe(nlen, copy=false, clean=false)
end
redef fun [](index) do
fun update `{ time(&self); `}
# Convert `self` to a human readable String.
- fun ctime: String import CString.to_s_with_copy `{
- return CString_to_s_with_copy( ctime(&self) );
+ fun ctime: String import CString.to_s `{
+ return CString_to_s( ctime(&self) );
`}
# Difference in secondes from start (self if the end time)
# Convert `self` to a human readable String corresponding to `format`.
# TODO document allowed format.
- fun strftime(format: String): String import String.to_cstring, CString.to_s_with_copy `{
+ fun strftime(format: String): String import String.to_cstring, CString.to_s `{
char* buf, *c_format;
buf = (char*)malloc(100);
c_format = String_to_cstring(format);
strftime(buf, 100, c_format, self);
- String s = CString_to_s_with_copy(buf);
+ String s = CString_to_s(buf);
free(buf);
return s;
`}
- redef fun to_s do return asctime.to_s_with_copy.replace("\n", "")
+ redef fun to_s do return asctime.to_s.replace("\n", "")
end
# Date using the international format defined by ISO 8601.
`}
# Convert given string to URL encoded string
- fun escape(url: String): String import String.to_cstring, CString.to_s_with_copy `{
+ fun escape(url: String): String import String.to_cstring, CString.to_s `{
char *orig_url, *encoded_url = NULL;
orig_url = String_to_cstring(url);
encoded_url = curl_easy_escape( self, orig_url, strlen(orig_url));
- String b_url = CString_to_s_with_copy(encoded_url);
+ String b_url = CString_to_s(encoded_url);
curl_free(encoded_url);
return b_url;
`}
fun is_valid_protocol: Bool `{ return self == CURLE_UNSUPPORTED_PROTOCOL; `}
fun is_valid_init: Bool `{ return self == CURLE_FAILED_INIT; `}
fun to_i: Int do return code end
- redef fun to_s import CString.to_s_with_copy `{
+ redef fun to_s import CString.to_s `{
char *c = (char*)curl_easy_strerror(self);
- return CString_to_s_with_copy(c);
+ return CString_to_s(c);
`}
end
gtk_assistant_set_page_type(self, page, t);
`}
- fun get_page_title(page: GtkWidget): String import CString.to_s_with_copy `{
- return CString_to_s_with_copy((char *)gtk_assistant_get_page_title(self, page));
+ fun get_page_title(page: GtkWidget): String import CString.to_s `{
+ return CString_to_s((char *)gtk_assistant_get_page_title(self, page));
`}
fun set_page_title(page: GtkWidget, title: String) import String.to_cstring `{
return (GtkFrame *)gtk_frame_new(String_to_cstring(lbl));
`}
- fun frame_label: String import CString.to_s_with_copy `{
- return CString_to_s_with_copy((char *)gtk_frame_get_label(self));
+ fun frame_label: String import CString.to_s `{
+ return CString_to_s((char *)gtk_frame_get_label(self));
`}
fun frame_label=(lbl: String) import String.to_cstring `{
return (GtkEntry *)gtk_entry_new();
`}
- fun text: String import CString.to_s_with_copy `{
- return CString_to_s_with_copy((char *)gtk_entry_get_text(self));
+ fun text: String import CString.to_s `{
+ return CString_to_s((char *)gtk_entry_get_text(self));
`}
fun text=(value: String) import String.to_cstring `{
`}
# Returns the text of the label
- fun text: String import CString.to_s_with_copy `{
- return CString_to_s_with_copy((char*)gtk_label_get_text(self));
+ fun text: String import CString.to_s `{
+ return CString_to_s((char*)gtk_label_get_text(self));
`}
# Sets the angle of rotation for the label.
return (GtkButton *)gtk_button_new_from_stock(String_to_cstring(stock_id));
`}
- fun text: String import CString.to_s_with_copy `{
- return CString_to_s_with_copy((char *)gtk_button_get_label(self));
+ fun text: String import CString.to_s `{
+ return CString_to_s((char *)gtk_button_get_label(self));
`}
fun text=(value: String) import String.to_cstring `{
gtk_expander_set_spacing(self, pixels);
`}
- fun label_text: String import CString.to_s_with_copy `{
- return CString_to_s_with_copy((char *)gtk_expander_get_label(self));
+ fun label_text: String import CString.to_s `{
+ return CString_to_s((char *)gtk_expander_get_label(self));
`}
fun label_text=(lbl: String) import String.to_cstring `{
gtk_combo_box_set_id_column(self, id_column);
`}
- fun active_id: String import CString.to_s_with_copy `{
- return CString_to_s_with_copy((char *)gtk_combo_box_get_active_id(self));
+ fun active_id: String import CString.to_s `{
+ return CString_to_s((char *)gtk_combo_box_get_active_id(self));
`}
fun active_id=(id_active: String) import String.to_cstring `{
gtk_combo_box_popdown(self);
`}
- fun title: String import CString.to_s_with_copy `{
- return CString_to_s_with_copy((char *)gtk_combo_box_get_title(self));
+ fun title: String import CString.to_s `{
+ return CString_to_s((char *)gtk_combo_box_get_title(self));
`}
fun title=(t: String) import String.to_cstring `{
return (GtkAboutDialog *)gtk_about_dialog_new();
`}
- fun program_name: String import CString.to_s_with_copy `{
- return CString_to_s_with_copy((char *)gtk_about_dialog_get_program_name(self));
+ fun program_name: String import CString.to_s `{
+ return CString_to_s((char *)gtk_about_dialog_get_program_name(self));
`}
fun program_name=(name: String) import String.to_cstring `{
gtk_about_dialog_set_program_name(self, String_to_cstring(name));
`}
- fun version: String import CString.to_s_with_copy `{
- return CString_to_s_with_copy((char *)gtk_about_dialog_get_version(self));
+ fun version: String import CString.to_s `{
+ return CString_to_s((char *)gtk_about_dialog_get_version(self));
`}
fun version=(v: String) import String.to_cstring `{
gtk_about_dialog_set_version(self, String_to_cstring(v));
`}
- fun copyright: String import CString.to_s_with_copy `{
- return CString_to_s_with_copy((char *)gtk_about_dialog_get_copyright(self));
+ fun copyright: String import CString.to_s `{
+ return CString_to_s((char *)gtk_about_dialog_get_copyright(self));
`}
fun copyright=(c: String) import String.to_cstring `{
gtk_about_dialog_set_copyright(self, String_to_cstring(c));
`}
- fun comments: String import CString.to_s_with_copy `{
- return CString_to_s_with_copy((char *)gtk_about_dialog_get_comments(self));
+ fun comments: String import CString.to_s `{
+ return CString_to_s((char *)gtk_about_dialog_get_comments(self));
`}
fun comments=(com: String) import String.to_cstring `{
gtk_about_dialog_set_comments(self, String_to_cstring(com));
`}
- fun license: String import CString.to_s_with_copy `{
- return CString_to_s_with_copy((char *)gtk_about_dialog_get_license(self));
+ fun license: String import CString.to_s `{
+ return CString_to_s((char *)gtk_about_dialog_get_license(self));
`}
fun license=(li: String) import String.to_cstring `{
# license_type
- fun website: String import CString.to_s_with_copy `{
- return CString_to_s_with_copy((char *)gtk_about_dialog_get_website(self));
+ fun website: String import CString.to_s `{
+ return CString_to_s((char *)gtk_about_dialog_get_website(self));
`}
fun website=(link: String) import String.to_cstring `{
gtk_about_dialog_set_website(self, String_to_cstring(link));
`}
- fun website_label: String import CString.to_s_with_copy `{
- return CString_to_s_with_copy((char *) gtk_about_dialog_get_website_label(self));
+ fun website_label: String import CString.to_s `{
+ return CString_to_s((char *) gtk_about_dialog_get_website_label(self));
`}
fun website_label=(link_label: String) import String.to_cstring `{
`}
# TODO
- # fun authors: String import CString.to_s_with_copy `{
- # return CString_to_s_with_copy(gtk_about_dialog_get_authors(self));
+ # fun authors: String import CString.to_s `{
+ # return CString_to_s(gtk_about_dialog_get_authors(self));
# `}
# TODO
fun widget: GtkWidget `{ return gtk_app_chooser_dialog_get_widget(self); `}
- fun heading: String import CString.to_s_with_copy `{
- return CString_to_s_with_copy((char *)gtk_app_chooser_dialog_get_heading(self));
+ fun heading: String import CString.to_s `{
+ return CString_to_s((char *)gtk_app_chooser_dialog_get_heading(self));
`}
fun heading=(text: String) import String.to_cstring `{
gtk_progress_bar_set_show_text(self, show);
`}
- fun text: String import CString.to_s_with_copy `{
- return CString_to_s_with_copy((char *)gtk_progress_bar_get_text(self));
+ fun text: String import CString.to_s `{
+ return CString_to_s((char *)gtk_progress_bar_get_text(self));
`}
fun text=(value: String) import String.to_cstring `{
redef fun to_s do
var ns = native.to_c_string
- var res = ns.to_s_with_copy
+ var res = ns.to_s
ns.free # manual free of gc allocated CString
return res
end
# Human readable error message.
fun message: String do
var ns = native.message
- var res = ns.to_s_with_copy
+ var res = ns.to_s
ns.free
return res
end
var i = 0
var name = nas[i]
while not name.address_is_null do
- res.add name.to_s_with_copy
+ res.add name.to_s
name.free
i += 1
name = nas[i]
var i = 0
var name = nas[i]
while not name.address_is_null do
- res.add name.to_s_with_copy
+ res.add name.to_s
name.free
i += 1
name = nas[i]
`}
# Object id.
- fun id: String import CString.to_s_with_copy `{
+ fun id: String import CString.to_s `{
char str[25];
bson_oid_to_string(self, str);
- return CString_to_s_with_copy(str);
+ return CString_to_s(str);
`}
# Destroy `self`.
error = new IOError.from_errno
return ""
end
- return buf.to_s_with_length(len)
+ return buf.to_s_unsafe(len, copy=false)
end
# Receive `length` bytes of data from any sender and store the sender info in `sender.item`
end
sender.item = new SocketAddress(src)
- return buf.to_s_with_length(len)
+ return buf.to_s_unsafe(len, copy=false)
end
# Send `data` to `dest_address` on `port`
var c_string = statement.native_statement.column_text(index)
if c_string.address_is_null then return ""
- return c_string.to_s_with_copy
+ return c_string.to_s
end
# Get this entry as `Blob`
self.add("{nat} = \"{string.escape_to_c}\";")
var byte_length = self.int_instance(string.byte_length)
var unilen = self.int_instance(string.length)
- self.add("{res} = {self.send(self.get_property("to_s_full", native_mtype), [nat, byte_length, unilen]).as(not null)};")
+ self.add("{res} = {self.send(self.get_property("to_s_unsafe", native_mtype), [nat, byte_length, unilen, value_instance(false), value_instance(false)]).as(not null)};")
self.add("{name} = {res};")
self.add("\}")
return res
fun string_instance(txt: String): Instance
do
var nat = c_string_instance(txt)
- var res = self.send(self.force_get_primitive_method("to_s_full", nat.mtype), [nat, self.int_instance(txt.byte_length), self.int_instance(txt.length)])
+ var res = self.send(self.force_get_primitive_method("to_s_unsafe", nat.mtype), [nat, self.int_instance(txt.byte_length), self.int_instance(txt.length), self.false_instance, self.false_instance])
assert res != null
return res
end
fun io_write(buf: CString, from, len: Int): Int do
if file isa FileStream then return file.as(FileStream)._file.io_write(buf, from, len)
- file.as(Writer).write(buf.to_s_with_length(len).substring_from(from))
+ file.as(Writer).write(buf.to_s_unsafe(len, copy=false).substring_from(from))
return len
end
do
var native = v.analysis.mainmodule.c_string_type
v.add_type(native)
- var prop = v.get_method(native, "to_s_full")
+ var prop = v.get_method(native, "to_s_unsafe")
v.add_monomorphic_send(native, prop)
v.add_callsite(to_re)
v.add_callsite(ignore_case)
-alt/error_needed_method_alt3.nit:48,9--13: Fatal Error: `CString` must have a property named `to_s_full`.
+alt/error_needed_method_alt3.nit:48,9--13: Fatal Error: `CString` must have a property named `to_s_unsafe`.
-alt/error_needed_method_alt4.nit:49,10--14: Fatal Error: `CString` must have a property named `to_s_full`.
+alt/error_needed_method_alt4.nit:49,10--14: Fatal Error: `CString` must have a property named `to_s_unsafe`.
new from_i(i: Int) `{ return i; `}
fun update `{ time(&self); `}
- fun ctime: String import CString.to_s_with_copy `{
- return CString_to_s_with_copy( ctime(&self) );
+ fun ctime: String import CString.to_s `{
+ return CString_to_s( ctime(&self) );
`}
# Difference in secondes from start (self if the end time)
fun update `{ time(&self); `}
- fun ctime: String import CString.to_s_with_copy `{
- return CString_to_s_with_copy( ctime(&self) );
+ fun ctime: String import CString.to_s `{
+ return CString_to_s( ctime(&self) );
`}
# Difference in secondes from start (self if the end time)
if name == "Array[String]" then return new Array[String].from_deserializer(self)
if name == "Array[Error]" then return new Array[Error].from_deserializer(self)
if name == "POSet[String]" then return new POSet[String].from_deserializer(self)
+ if name == "Array[Int]" then return new Array[Int].from_deserializer(self)
if name == "Array[nullable Object]" then return new Array[nullable Object].from_deserializer(self)
if name == "HashSet[String]" then return new HashSet[String].from_deserializer(self)
if name == "Array[nullable FlatString]" then return new Array[nullable FlatString].from_deserializer(self)
if name == "Array[FlatString]" then return new Array[FlatString].from_deserializer(self)
if name == "Array[nullable Int]" then return new Array[nullable Int].from_deserializer(self)
- if name == "Array[Int]" then return new Array[Int].from_deserializer(self)
if name == "Array[nullable Float]" then return new Array[nullable Float].from_deserializer(self)
if name == "Array[Float]" then return new Array[Float].from_deserializer(self)
if name == "Array[Object]" then return new Array[Object].from_deserializer(self)
var referenced_str: nullable String = null
- fun get_c_string import FlatString.items, CString.to_s, CString.to_s_with_copy, StringTest.ref_test, StringTest.copy_test `{
+ fun get_c_string import FlatString.items, CString.to_s, CString.to_s, StringTest.ref_test, StringTest.copy_test `{
char* string = "This is a test string";
FlatString ref_string = CString_to_s(string);
StringTest_ref_test(self, ref_string);
- FlatString copy_string = CString_to_s_with_copy(string);
+ FlatString copy_string = CString_to_s(string);
StringTest_copy_test(self, copy_string);
int same_refs = FlatString_items(copy_string) == FlatString_items(ref_string);
var copy_len = (str.byte_length - 4).min(9)
str.copy_to_native(ons, copy_len, 4, 0)
-print ons.to_s_with_length(copy_len)
+print ons.to_s_unsafe(copy_len, copy=false)
var ns = new CString(cpstr.byte_length)
ns.fill_from(cpstr)
-print ns.to_s_with_length(cpstr.byte_length)
+print ns.to_s_unsafe(cpstr.byte_length, copy=false)
fun update `{ time(&self); `}
- fun ctime: String import CString.to_s_with_copy `{
- return CString_to_s_with_copy( ctime(&self) );
+ fun ctime: String import CString.to_s `{
+ return CString_to_s( ctime(&self) );
`}
# Difference in secondes from start (self if the end time)