- '\uXXXX' for small code points (less than U+FFFF)
- '\UXXXXXX' for large code points
- Does not support UTF-16 surrogate pairs
+* `iter.next_opt`
+* `memory.ptr_add`
+* `misc.any_member`
Removals:
* `iter.single` can take a `dispose` function, which is called on close of the
iterator, with the single value yielded.
* `io.write_escaped_str` supports escaping "\\" now.
-
+* In Javascript runtime, made `__read_from_input` not defined right away, so
+ it can be overridden depending on the needs of the program.
Bugfixes:
* `json` encoder was wrongly not encoding strings when using `encode` on an `any`.
for i: a.count {
if i != 0 do io.write(w, ",");
- encode(w, any.{ ~~(cast([^] u8) arr + get_type_info(a.of).size * i), a.of });
+ encode(w, misc.any_subscript(data, i));
}
io.write(w, "]");
for i: count {
if i != 0 do io.write(w, ",");
- encode(w, any.{ ~~(cast([^] u8) data + get_type_info(a.of).size * i), a.of });
+ encode(w, misc.any_subscript(data, i));
}
io.write(w, "]");
encode(w, key);
io.write(w, ":");
- encode(w, any.{ ~~(cast([^] u8) data.data + member.offset), member.type });
+ encode(w, misc.any_member(data, member));
}
io.write(w, "}");
}
array.init(^v.array_, a_info.count, allocator);
for i: a_info.count {
- v.array_ << from_any(a_info.of, cast([^] u8) in + size_of(a_info.of) * i);
+ v.array_ << from_any(a_info.of, memory.ptr_add(in, size_of(a_info.of) * i));
}
return Value.{v};
array.init(^v.array_, s.count, allocator);
for i: s.count {
- v.array_ << from_any(s_info.of, cast([^] u8) s.data + size_of(s_info.of) * i);
+ v.array_ << from_any(s_info.of, memory.ptr_add(s.data, size_of(s_info.of) * i));
}
return Value.{v};
}
}
- json.set(Value.{v}, key, from_any(member.type, cast([^] u8) in + member.offset), dont_copy_key=true);
+ json.set(Value.{v}, key, from_any(member.type, memory.ptr_add(in, member.offset)), dont_copy_key=true);
}
return Value.{v};
a_info := cast(^Type_Info_Array) t_info;
for i: a_info.count {
- to_any(value[i], a_info.of, cast([^] u8) out + size_of(a_info.of) * i);
+ to_any(value[i], a_info.of, memory.ptr_add(out, size_of(a_info.of) * i));
}
}
}
for i: s.count {
- to_any(value[i], s_info.of, cast([^] u8) s.data + size_of(s_info.of) * i);
+ to_any(value[i], s_info.of, memory.ptr_add(s.data, size_of(s_info.of) * i));
}
}
}
}
- to_any(value[key], member.type, cast([^] u8) out + member.offset);
+ to_any(value[key], member.type, memory.ptr_add(out, member.offset));
}
}
return .{null, void};
}
+#doc """
+"""
+any_member :: #match #locked {
+ macro (v: any, member_type: type_expr, member_offset: u32) -> any {
+ return any.{
+ cast([&] u8, v.data) + member_offset,
+ member_type
+ };
+ },
+
+ (v: any, member: &Type_Info_Struct.Member) -> any {
+ return any.{
+ cast([&] u8, v.data) + member.offset,
+ member.type
+ };
+ }
+}
+
#doc """
Convert a structure or pointer to a structure to a Map with
keys representing the fields of the structure, and values