name = m.get_cname ();
var parent_prefix = parent.get_lower_case_cprefix ();
if (name.has_prefix (parent_prefix)) {
- name = name.offset (parent_prefix.length);
+ name = name.substring (parent_prefix.length);
}
} else {
name = m.name;
// strip extension if there is one
// else we use the default output file of the C compiler
if (sources[0].rchr (-1, '.') != null) {
- long dot = sources[0].pointer_to_offset (sources[0].rchr (-1, '.'));
+ long dot = (long) ((char*) sources[0].rchr (-1, '.') - (char*) sources[0]);
output = Path.get_basename (sources[0].substring (0, dot));
}
}
if (last_hyphen == null || !gir.has_suffix (".gir")) {
Report.error (null, "GIR file name `%s' is not well-formed, expected NAME-VERSION.gir".printf (gir));
} else {
- long offset = gir.pointer_to_offset (last_hyphen);
+ long offset = (long) ((char*) last_hyphen - (char*) gir);
string gir_namespace = gir.substring (0, offset);
string gir_version = gir.substring (offset + 1, gir_len - offset - 5);
gir_version.canon ("0123456789.", '?');
// remove underscores in some cases to avoid conflicts of type macros
if (lower_case_csuffix.has_prefix ("type_")) {
- lower_case_csuffix = "type" + lower_case_csuffix.offset ("type_".length);
+ lower_case_csuffix = "type" + lower_case_csuffix.substring ("type_".length);
} else if (lower_case_csuffix.has_prefix ("is_")) {
- lower_case_csuffix = "is" + lower_case_csuffix.offset ("is_".length);
+ lower_case_csuffix = "is" + lower_case_csuffix.substring ("is_".length);
}
if (lower_case_csuffix.has_suffix ("_class")) {
lower_case_csuffix = lower_case_csuffix.substring (0, lower_case_csuffix.length - "_class".length) + "class";
add_source_file (source_file);
// look for a local .deps
- var deps_filename = "%s.deps".printf (filename.ndup (filename.length - ".vapi".length));
+ var deps_filename = "%s.deps".printf (filename.substring (0, filename.length - ".vapi".length));
if (!add_packages_from_file (deps_filename)) {
return false;
}
}
private static bool ends_with_dir_separator (string s) {
- return Path.is_dir_separator (s.offset (s.length - 1).get_char ());
+ return Path.is_dir_separator (s.get_char (s.length - 1));
}
/* ported from glibc */
start = end = Path.skip_root (name);
// extract root
- rpath = name.substring (0, name.pointer_to_offset (start));
+ rpath = name.substring (0, (int) ((char*) start - (char*) name));
}
- long root_len = rpath.pointer_to_offset (Path.skip_root (rpath));
+ long root_len = (long) ((char*) Path.skip_root (rpath) - (char*) rpath);
for (; start.get_char () != 0; start = end) {
// skip sequence of multiple path-separators
}
string get_current_string () {
- return ((string) tokens[index].begin.pos).ndup ((tokens[index].end.pos - tokens[index].begin.pos));
+ return ((string) tokens[index].begin.pos).substring (0, (int) (tokens[index].end.pos - tokens[index].begin.pos));
}
string get_last_string () {
int last_index = (index + BUFFER_SIZE - 1) % BUFFER_SIZE;
- return ((string) tokens[last_index].begin.pos).ndup ((tokens[last_index].end.pos - tokens[last_index].begin.pos));
+ return ((string) tokens[last_index].begin.pos).substring (0, (int) (tokens[last_index].end.pos - tokens[last_index].begin.pos));
}
SourceReference get_src (SourceLocation begin) {
if (len > 2) {
string s = "\\n\"";
- var st = s_exp.value.ndup (len-1);
+ var st = s_exp.value.substring (0, len-1);
st += s;
s_exp.value = st;
}
}
if (source_reference != null) {
- push_comment (((string) begin).ndup ((long) (current - begin)), source_reference, file_comment);
+ push_comment (((string) begin).substring (0, (long) (current - begin)), source_reference, file_comment);
}
} else {
}
if (source_reference != null) {
- string comment = ((string) begin).ndup ((long) (current - begin));
+ string comment = ((string) begin).substring (0, (long) (current - begin));
push_comment (comment, source_reference, file_comment);
}
return false;
}
- string identifier = ((string) (current - len)).ndup (len);
+ string identifier = ((string) (current - len)).substring (0, len);
bool defined;
if (identifier == "true") {
defined = true;
}
string get_string () {
- return ((string) begin.pos).ndup ((end.pos - begin.pos));
+ return ((string) begin.pos).substring (0, (int) (end.pos - begin.pos));
}
MetadataType? parse_metadata_access () {
girdata_stack = new ArrayList<HashMap<string,string>> ();
// load metadata
- string metadata_filename = "%s.metadata".printf (source_file.filename.ndup (source_file.filename.length - ".gir".length));
+ string metadata_filename = "%s.metadata".printf (source_file.filename.substring (0, source_file.filename.length - ".gir".length));
if (FileUtils.test (metadata_filename, FileTest.EXISTS)) {
var metadata_parser = new MetadataParser ();
var metadata_file = new SourceFile (context, source_file.file_type, metadata_filename);
common_prefix = cname;
while (common_prefix.length > 0 && !common_prefix.has_suffix ("_")) {
// FIXME: could easily be made faster
- common_prefix = common_prefix.ndup (common_prefix.length - 1);
+ common_prefix = common_prefix.substring (0, common_prefix.length - 1);
}
} else {
while (!cname.has_prefix (common_prefix)) {
- common_prefix = common_prefix.ndup (common_prefix.length - 1);
+ common_prefix = common_prefix.substring (0, common_prefix.length - 1);
}
}
while (common_prefix.length > 0 && (!common_prefix.has_suffix ("_") ||
- (cname.offset (common_prefix.length).get_char ().isdigit ()) && (cname.length - common_prefix.length) <= 1)) {
+ (cname.get_char (common_prefix.length).isdigit ()) && (cname.length - common_prefix.length) <= 1)) {
// enum values may not consist solely of digits
- common_prefix = common_prefix.ndup (common_prefix.length - 1);
+ common_prefix = common_prefix.substring (0, common_prefix.length - 1);
}
}
if (m.name == "new") {
m.name = null;
} else if (m.name.has_prefix ("new_")) {
- m.name = m.name.offset ("new_".length);
+ m.name = m.name.substring ("new_".length);
}
if (cname != null) {
m.set_cname (cname);
if (parent != null && (parent is Struct || parent is ObjectTypeSymbol || parent is Namespace)
&& cname.has_prefix (parent.get_lower_case_cprefix ())) {
// instance method
- var new_name = method.name.offset (parent.get_lower_case_cprefix().length-ns_cprefix.length);
+ var new_name = method.name.substring (parent.get_lower_case_cprefix().length - ns_cprefix.length);
if (parent.scope.lookup (new_name) == null) {
method.name = new_name;
method.get_parameters().remove_at (0);
double match = 0;
Symbol parent = ns;
find_static_method_parent (cname, ns, ref parent, ref match, 1.0/cname.length);
- var new_name = method.name.offset (parent.get_lower_case_cprefix().length-ns_cprefix.length);
+ var new_name = method.name.substring (parent.get_lower_case_cprefix().length - ns_cprefix.length);
if (parent.scope.lookup (new_name) == null) {
method.name = new_name;
add_symbol_to_container (parent, method);
int l = 0;
while (value.has_suffix ("l") || value.has_suffix ("L")) {
l++;
- value = value.ndup (value.length - 1);
+ value = value.substring (0, value.length - 1);
}
bool u = false;
if (value.has_suffix ("u") || value.has_suffix ("U")) {
u = true;
- value = value.ndup (value.length - 1);
+ value = value.substring (0, value.length - 1);
}
int64 n = value.to_int64 ();
// remove underscores in some cases to avoid conflicts of type macros
if (result.has_prefix ("type_")) {
- result = "type" + result.offset ("type_".length);
+ result = "type" + result.substring ("type_".length);
} else if (result.has_prefix ("is_")) {
- result = "is" + result.offset ("is_".length);
+ result = "is" + result.substring ("is_".length);
}
if (result.has_suffix ("_class")) {
result = result.substring (0, result.length - "_class".length) + "class";
if (current == begin) {
// syntax error: invalid name
}
- return ((string) begin).ndup (current - begin);
+ return ((string) begin).substring (0, (int) (current - begin));
}
public MarkupTokenType read_token (out SourceLocation token_begin, out SourceLocation token_end) {
} else if (u == '&') {
char* next_pos = current + u.to_utf8 (null);
if (((string) next_pos).has_prefix ("amp;")) {
- content.append (((string) text_begin).ndup (current - text_begin));
+ content.append (((string) text_begin).substring (0, (int) (current - text_begin)));
content.append_c ('&');
current += 5;
text_begin = current;
} else if (((string) next_pos).has_prefix ("quot;")) {
- content.append (((string) text_begin).ndup (current - text_begin));
+ content.append (((string) text_begin).substring (0, (int) (current - text_begin)));
content.append_c ('"');
current += 6;
text_begin = current;
} else if (((string) next_pos).has_prefix ("apos;")) {
- content.append (((string) text_begin).ndup (current - text_begin));
+ content.append (((string) text_begin).substring (0, (int) (current - text_begin)));
content.append_c ('\'');
current += 6;
text_begin = current;
} else if (((string) next_pos).has_prefix ("lt;")) {
- content.append (((string) text_begin).ndup (current - text_begin));
+ content.append (((string) text_begin).substring (0, (int) (current - text_begin)));
content.append_c ('<');
current += 4;
text_begin = current;
} else if (((string) next_pos).has_prefix ("gt;")) {
- content.append (((string) text_begin).ndup (current - text_begin));
+ content.append (((string) text_begin).substring (0, (int) (current - text_begin)));
content.append_c ('>');
current += 4;
text_begin = current;
}
if (text_begin != current) {
- content.append (((string) text_begin).ndup (current - text_begin));
+ content.append (((string) text_begin).substring (0, (int) (current - text_begin)));
}
column += (int) (current - last_linebreak);
// avoid conflict with generated main function
return "_vala_main";
} else if (name.has_prefix ("_")) {
- return "_%s%s".printf (parent_symbol.get_lower_case_cprefix (), name.offset (1));
+ return "_%s%s".printf (parent_symbol.get_lower_case_cprefix (), name.substring (1));
} else {
return "%s%s".printf (parent_symbol.get_lower_case_cprefix (), name);
}
}
string get_current_string () {
- return ((string) tokens[index].begin.pos).ndup ((tokens[index].end.pos - tokens[index].begin.pos));
+ return ((string) tokens[index].begin.pos).substring (0, (int) (tokens[index].end.pos - tokens[index].begin.pos));
}
string get_last_string () {
int last_index = (index + BUFFER_SIZE - 1) % BUFFER_SIZE;
- return ((string) tokens[last_index].begin.pos).ndup ((tokens[last_index].end.pos - tokens[last_index].begin.pos));
+ return ((string) tokens[last_index].begin.pos).substring (0, (int) (tokens[last_index].end.pos - tokens[last_index].begin.pos));
}
SourceReference get_src (SourceLocation begin) {
return false;
}
- string identifier = ((string) (current - len)).ndup (len);
+ string identifier = ((string) (current - len)).substring (0, len);
bool defined;
if (identifier == "true") {
defined = true;
}
if (source_reference != null) {
- push_comment (((string) begin).ndup ((long) (current - begin)), source_reference, file_comment);
+ push_comment (((string) begin).substring (0, (long) (current - begin)), source_reference, file_comment);
}
} else {
SourceReference source_reference = null;
}
if (source_reference != null) {
- push_comment (((string) begin).ndup ((long) (current - begin)), source_reference, file_comment);
+ push_comment (((string) begin).substring (0, (long) (current - begin)), source_reference, file_comment);
}
current += 2;
if (diag && prev_arg != null) {
var format_arg = prev_arg as StringLiteral;
if (format_arg != null) {
- format_arg.value = "\"%s:%d: %s".printf (Path.get_basename (expr.source_reference.file.filename), expr.source_reference.first_line, format_arg.value.offset (1));
+ format_arg.value = "\"%s:%d: %s".printf (Path.get_basename (expr.source_reference.file.filename), expr.source_reference.first_line, format_arg.value.substring (1));
}
}
var basename = Path.get_basename (filename);
var subdir = filename.substring (context.basedir.length, filename.length - context.basedir.length - basename.length);
while (subdir[0] == '/') {
- subdir = subdir.offset (1);
+ subdir = subdir.substring (1);
}
return subdir;
}
}
private string get_basename () {
- long dot = filename.pointer_to_offset (filename.rchr (-1, '.'));
+ long dot = (long) ((char*) filename.rchr (-1, '.') - (char*) filename);
return Path.get_basename (filename.substring (0, dot));
}
}
string parent_gir_name = parent_symbol.get_full_gir_name ();
- string self_gir_name = gir_name.has_prefix (".") ? gir_name.offset (1) : gir_name;
+ string self_gir_name = gir_name.has_prefix (".") ? gir_name.substring (1) : gir_name;
if (parent_gir_name.str (".") != null) {
return "%s%s".printf (parent_gir_name, self_gir_name);
} else {
/* previous character wasn't upper case or
* next character isn't upper case*/
long len = result_builder.str.length;
- if (len != 1 && result_builder.str.offset (len - 2).get_char () != '_') {
+ if (len != 1 && result_builder.str.get_char (len - 2) != '_') {
/* we're not creating 1 character words */
result_builder.append_c ('_');
}
public unowned string next_char ();
[CCode (cname = "g_utf8_get_char")]
static unichar utf8_get_char (char* str);
- public unichar get_char (int index = 0) {
+ public unichar get_char (long index = 0) {
return utf8_get_char ((char*) this + index);
}
[CCode (cname = "g_utf8_get_char_validated")]
public unichar get_char_validated (ssize_t max_len = -1);
+
+ [Deprecated (replacement = "string.index_of_nth_char")]
[CCode (cname = "g_utf8_offset_to_pointer")]
public unowned string utf8_offset (long offset);
+ [Deprecated (replacement = "string.substring")]
public unowned string offset (long offset) {
return (string) ((char*) this + offset);
}
+ [Deprecated (replacement = "string.char_count")]
public long pointer_to_offset (string pos) {
return (long) ((char*) pos - (char*) this);
}
+
+ [CCode (cname = "g_utf8_offset_to_pointer")]
+ char* utf8_offset_to_pointer (long offset);
+
+ public int index_of_nth_char (long c) {
+ return (int) (this.utf8_offset_to_pointer (c) - (char*) this);
+ }
+
[CCode (cname = "g_utf8_prev_char")]
public unowned string prev_char ();
[Deprecated (replacement = "string.length")]
[CCode (cname = "g_strdup")]
public string dup ();
+ [Deprecated (replacement = "string.substring")]
[CCode (cname = "g_strndup")]
public string ndup (size_t n);
+ [CCode (cname = "g_strndup")]
+ static string strndup (char* str, size_t n);
+
public string substring (long offset, long len = -1) {
long string_length = this.length;
if (offset < 0) {
len = string_length - offset;
}
GLib.return_val_if_fail (offset + len <= string_length, null);
- unowned string start = this.offset (offset);
- return start.ndup (((char*) start.offset (len)) - ((char*) start));
+ return strndup ((char*) this + offset, len);
}
public string slice (long start, long end) {
GLib.return_val_if_fail (start >= 0 && start <= string_length, null);
GLib.return_val_if_fail (end >= 0 && end <= string_length, null);
GLib.return_val_if_fail (start <= end, null);
- unowned string start_string = this.offset (start);
- return start_string.ndup (((char*) start_string.offset (end - start)) - ((char*) start_string));
+ return strndup ((char*) this + start, end - start);
}
public string splice (long start, long end, string? str = null) {
GLib.return_val_if_fail (end >= 0 && end <= string_length, null);
GLib.return_val_if_fail (start <= end, null);
- unowned string start_string = this.offset (start);
- unowned string end_string = start_string.offset (end - start);
size_t str_size;
if (str == null) {
str_size = 0;
str_size = str.length;
}
- string* result = GLib.malloc0 (this.length - ((char*) end_string - (char*) start_string) + str_size + 1);
+ string* result = GLib.malloc0 (this.length - (end - start) + str_size + 1);
char* dest = (char*) result;
- GLib.Memory.copy (dest, this, (char*) start_string - (char*) this);
- dest += (char*) start_string - (char*) this;
+ GLib.Memory.copy (dest, this, start);
+ dest += start;
GLib.Memory.copy (dest, str, str_size);
dest += str_size;
- GLib.Memory.copy (dest, end_string, end_string.length);
+ GLib.Memory.copy (dest, (char*) this + end, string_length - end);
return (owned) result;
}
}
private void parse_file (SourceFile source_file) {
- string metadata_filename = "%s.metadata".printf (source_file.filename.ndup (source_file.filename.length - ".gi".length));
+ string metadata_filename = "%s.metadata".printf (source_file.filename.substring (0, source_file.filename.length - ".gi".length));
current_source_file = source_file;
}
if (type_name.has_prefix (container.name)) {
- return type_name.offset (container.name.length);
+ return type_name.substring (container.name.length);
} else if (container.name == "GLib" && type_name.has_prefix ("G")) {
- return type_name.offset (1);
+ return type_name.substring (1);
} else {
string best_match = null;
if (container is Namespace) {
}
if (best_match != null) {
- return type_name.offset (best_match.length);;
+ return type_name.substring (best_match.length);;
}
}
private string fix_const_name (string const_name, Symbol container) {
var pref = container.get_lower_case_cprefix ().up ();
if (const_name.has_prefix (pref)) {
- return const_name.offset (pref.length);
+ return const_name.substring (pref.length);
}
return const_name;
}
common_prefix = value.name;
while (common_prefix.length > 0 && !common_prefix.has_suffix ("_")) {
// FIXME: could easily be made faster
- common_prefix = common_prefix.ndup (common_prefix.length - 1);
+ common_prefix = common_prefix.substring (0, common_prefix.length - 1);
}
} else {
while (!value.name.has_prefix (common_prefix)) {
- common_prefix = common_prefix.ndup (common_prefix.length - 1);
+ common_prefix = common_prefix.substring (0, common_prefix.length - 1);
}
}
while (common_prefix.length > 0 && (!common_prefix.has_suffix ("_") ||
- (value.name.offset (common_prefix.length).get_char ().isdigit ()) && (value.name.length - common_prefix.length) <= 1)) {
+ (value.name.get_char (common_prefix.length).isdigit ()) && (value.name.length - common_prefix.length) <= 1)) {
// enum values may not consist solely of digits
- common_prefix = common_prefix.ndup (common_prefix.length - 1);
+ common_prefix = common_prefix.substring (0, common_prefix.length - 1);
}
}
}
if (!is_hidden) {
- var ev = new EnumValue (value2.name.offset (common_prefix.length), null);
+ var ev = new EnumValue (value2.name.substring (common_prefix.length), null);
en.add_value (ev);
}
}
}
if (n.has_prefix ("const-")) {
- n = n.offset ("const-".length);
+ n = n.substring ("const-".length);
}
if (type_node.is_pointer &&
var nv = attr.split ("=", 2);
if (nv[0] == "cprefix") {
- type.unresolved_symbol = new UnresolvedSymbol (null, n.offset (eval (nv[1]).length));
+ type.unresolved_symbol = new UnresolvedSymbol (null, n.substring (eval (nv[1]).length));
} else if (nv[0] == "name") {
type.unresolved_symbol = new UnresolvedSymbol (null, eval (nv[1]));
} else if (nv[0] == "namespace") {
}
if (n.has_prefix (current_namespace.name)) {
- type.unresolved_symbol = new UnresolvedSymbol (new UnresolvedSymbol (null, current_namespace.name), n.offset (current_namespace.name.length));
+ type.unresolved_symbol = new UnresolvedSymbol (new UnresolvedSymbol (null, current_namespace.name), n.substring (current_namespace.name.length));
} else if (n.has_prefix ("G")) {
- type.unresolved_symbol = new UnresolvedSymbol (new UnresolvedSymbol (null, "GLib"), n.offset (1));
+ type.unresolved_symbol = new UnresolvedSymbol (new UnresolvedSymbol (null, "GLib"), n.substring (1));
} else {
var name_parts = n.split (".", 2);
if (name_parts[1] == null) {
if (m.name == "new") {
m.name = null;
} else if (m.name.has_prefix ("new_")) {
- m.name = m.name.offset ("new_".length);
+ m.name = m.name.substring ("new_".length);
}
// For classes, check whether a creation method return type equals to the
// type of the class created. If the types do not match (e.g. in most
var prefix = container.get_lower_case_cprefix ();
if (symbol.has_prefix (prefix)) {
m.set_cname (m.name);
- m.name = symbol.offset (prefix.length);
+ m.name = symbol.substring (prefix.length);
}
}
}
p.initializer = new StringLiteral ("\"\"", param_type.source_reference);
} else {
unowned string endptr;
- unowned string val_end = val.offset (val.length);
+ char* val_end = (char*) val + val.length;
val.to_long (out endptr);
if ((long)endptr == (long)val_end) {
}
}
- remaining = remaining.offset (1);
+ remaining = (string) ((char*) remaining + remaining.index_of_nth_char (1));
}
if (attr.len > 0) {
}
private string eval (string s) {
- return ((s.length >= 2) && s.has_prefix ("\"") && s.has_suffix ("\"")) ? s.offset (1).ndup (s.length - 2) : s;
+ return ((s.length >= 2) && s.has_prefix ("\"") && s.has_suffix ("\"")) ? s.substring (1, s.length - 2) : s;
}
private Signal? parse_signal (IdlNodeSignal sig_node) {
if (file.filename in sources) {
file.file_type = SourceFileType.SOURCE;
} else if (file.filename.has_suffix (".metadata")) {
- string gir_filename = "%s.gir".printf (file.filename.ndup (file.filename.length - ".metadata".length));
+ string gir_filename = "%s.gir".printf (file.filename.substring (0, file.filename.length - ".metadata".length));
if (gir_filename in sources) {
file.file_type = SourceFileType.SOURCE;
}