mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-05 23:28:48 +00:00
Merge branch 'master' of https://github.com/odin-lang/Odin
This commit is contained in:
@@ -343,7 +343,7 @@ unquote_string :: proc(token: Token, spec: Specification, allocator := context.a
|
|||||||
i += 1
|
i += 1
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
r, w := utf8.decode_rune_in_string(s)
|
r, w := utf8.decode_rune_in_string(s[i:])
|
||||||
if r == utf8.RUNE_ERROR && w == 1 {
|
if r == utf8.RUNE_ERROR && w == 1 {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -39,12 +39,12 @@ write_int :: proc(w: Writer, i: int, base: int = 10, n_written: ^int = nil) -> (
|
|||||||
}
|
}
|
||||||
|
|
||||||
write_u128 :: proc(w: Writer, i: u128, base: int = 10, n_written: ^int = nil) -> (n: int, err: Error) {
|
write_u128 :: proc(w: Writer, i: u128, base: int = 10, n_written: ^int = nil) -> (n: int, err: Error) {
|
||||||
buf: [32]byte
|
buf: [39]byte
|
||||||
s := strconv.append_bits_128(buf[:], i, base, false, 128, strconv.digits, nil)
|
s := strconv.append_bits_128(buf[:], i, base, false, 128, strconv.digits, nil)
|
||||||
return write_string(w, s, n_written)
|
return write_string(w, s, n_written)
|
||||||
}
|
}
|
||||||
write_i128 :: proc(w: Writer, i: i128, base: int = 10, n_written: ^int = nil) -> (n: int, err: Error) {
|
write_i128 :: proc(w: Writer, i: i128, base: int = 10, n_written: ^int = nil) -> (n: int, err: Error) {
|
||||||
buf: [32]byte
|
buf: [40]byte
|
||||||
s := strconv.append_bits_128(buf[:], u128(i), base, true, 128, strconv.digits, nil)
|
s := strconv.append_bits_128(buf[:], u128(i), base, true, 128, strconv.digits, nil)
|
||||||
return write_string(w, s, n_written)
|
return write_string(w, s, n_written)
|
||||||
}
|
}
|
||||||
|
|||||||
+16
-21
@@ -356,7 +356,9 @@ gb_internal void error_out_coloured(char const *str, TerminalStyle style, Termin
|
|||||||
|
|
||||||
gb_internal void error_va(TokenPos const &pos, TokenPos end, char const *fmt, va_list va) {
|
gb_internal void error_va(TokenPos const &pos, TokenPos end, char const *fmt, va_list va) {
|
||||||
global_error_collector.count.fetch_add(1);
|
global_error_collector.count.fetch_add(1);
|
||||||
|
if (global_error_collector.count > MAX_ERROR_COLLECTOR_COUNT()) {
|
||||||
|
gb_exit(1);
|
||||||
|
}
|
||||||
mutex_lock(&global_error_collector.mutex);
|
mutex_lock(&global_error_collector.mutex);
|
||||||
// NOTE(bill): Duplicate error, skip it
|
// NOTE(bill): Duplicate error, skip it
|
||||||
if (pos.line == 0) {
|
if (pos.line == 0) {
|
||||||
@@ -372,11 +374,10 @@ gb_internal void error_va(TokenPos const &pos, TokenPos end, char const *fmt, va
|
|||||||
error_out_va(fmt, va);
|
error_out_va(fmt, va);
|
||||||
error_out("\n");
|
error_out("\n");
|
||||||
show_error_on_line(pos, end);
|
show_error_on_line(pos, end);
|
||||||
|
} else {
|
||||||
|
global_error_collector.count.fetch_sub(1);
|
||||||
}
|
}
|
||||||
mutex_unlock(&global_error_collector.mutex);
|
mutex_unlock(&global_error_collector.mutex);
|
||||||
if (global_error_collector.count > MAX_ERROR_COLLECTOR_COUNT()) {
|
|
||||||
gb_exit(1);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
gb_internal void warning_va(TokenPos const &pos, TokenPos end, char const *fmt, va_list va) {
|
gb_internal void warning_va(TokenPos const &pos, TokenPos end, char const *fmt, va_list va) {
|
||||||
@@ -410,8 +411,11 @@ gb_internal void error_line_va(char const *fmt, va_list va) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
gb_internal void error_no_newline_va(TokenPos const &pos, char const *fmt, va_list va) {
|
gb_internal void error_no_newline_va(TokenPos const &pos, char const *fmt, va_list va) {
|
||||||
mutex_lock(&global_error_collector.mutex);
|
|
||||||
global_error_collector.count.fetch_add(1);
|
global_error_collector.count.fetch_add(1);
|
||||||
|
if (global_error_collector.count.load() > MAX_ERROR_COLLECTOR_COUNT()) {
|
||||||
|
gb_exit(1);
|
||||||
|
}
|
||||||
|
mutex_lock(&global_error_collector.mutex);
|
||||||
// NOTE(bill): Duplicate error, skip it
|
// NOTE(bill): Duplicate error, skip it
|
||||||
if (pos.line == 0) {
|
if (pos.line == 0) {
|
||||||
error_out_coloured("Error: ", TerminalStyle_Normal, TerminalColour_Red);
|
error_out_coloured("Error: ", TerminalStyle_Normal, TerminalColour_Red);
|
||||||
@@ -425,15 +429,15 @@ gb_internal void error_no_newline_va(TokenPos const &pos, char const *fmt, va_li
|
|||||||
error_out_va(fmt, va);
|
error_out_va(fmt, va);
|
||||||
}
|
}
|
||||||
mutex_unlock(&global_error_collector.mutex);
|
mutex_unlock(&global_error_collector.mutex);
|
||||||
if (global_error_collector.count.load() > MAX_ERROR_COLLECTOR_COUNT()) {
|
|
||||||
gb_exit(1);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
gb_internal void syntax_error_va(TokenPos const &pos, TokenPos end, char const *fmt, va_list va) {
|
gb_internal void syntax_error_va(TokenPos const &pos, TokenPos end, char const *fmt, va_list va) {
|
||||||
|
global_error_collector.count.fetch_add(1);
|
||||||
|
if (global_error_collector.count > MAX_ERROR_COLLECTOR_COUNT()) {
|
||||||
|
gb_exit(1);
|
||||||
|
}
|
||||||
mutex_lock(&global_error_collector.mutex);
|
mutex_lock(&global_error_collector.mutex);
|
||||||
global_error_collector.count++;
|
|
||||||
// NOTE(bill): Duplicate error, skip it
|
// NOTE(bill): Duplicate error, skip it
|
||||||
if (global_error_collector.prev != pos) {
|
if (global_error_collector.prev != pos) {
|
||||||
global_error_collector.prev = pos;
|
global_error_collector.prev = pos;
|
||||||
@@ -447,16 +451,14 @@ gb_internal void syntax_error_va(TokenPos const &pos, TokenPos end, char const *
|
|||||||
error_out_va(fmt, va);
|
error_out_va(fmt, va);
|
||||||
error_out("\n");
|
error_out("\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
mutex_unlock(&global_error_collector.mutex);
|
mutex_unlock(&global_error_collector.mutex);
|
||||||
if (global_error_collector.count > MAX_ERROR_COLLECTOR_COUNT()) {
|
|
||||||
gb_exit(1);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
gb_internal void syntax_error_with_verbose_va(TokenPos const &pos, TokenPos end, char const *fmt, va_list va) {
|
gb_internal void syntax_error_with_verbose_va(TokenPos const &pos, TokenPos end, char const *fmt, va_list va) {
|
||||||
global_error_collector.count.fetch_add(1);
|
global_error_collector.count.fetch_add(1);
|
||||||
|
if (global_error_collector.count > MAX_ERROR_COLLECTOR_COUNT()) {
|
||||||
|
gb_exit(1);
|
||||||
|
}
|
||||||
mutex_lock(&global_error_collector.mutex);
|
mutex_lock(&global_error_collector.mutex);
|
||||||
// NOTE(bill): Duplicate error, skip it
|
// NOTE(bill): Duplicate error, skip it
|
||||||
if (pos.line == 0) {
|
if (pos.line == 0) {
|
||||||
@@ -474,9 +476,6 @@ gb_internal void syntax_error_with_verbose_va(TokenPos const &pos, TokenPos end,
|
|||||||
show_error_on_line(pos, end);
|
show_error_on_line(pos, end);
|
||||||
}
|
}
|
||||||
mutex_unlock(&global_error_collector.mutex);
|
mutex_unlock(&global_error_collector.mutex);
|
||||||
if (global_error_collector.count > MAX_ERROR_COLLECTOR_COUNT()) {
|
|
||||||
gb_exit(1);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -578,7 +577,3 @@ gb_internal void compiler_error(char const *fmt, ...) {
|
|||||||
GB_DEBUG_TRAP();
|
GB_DEBUG_TRAP();
|
||||||
gb_exit(1);
|
gb_exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ main :: proc() {
|
|||||||
marshal_json(&t)
|
marshal_json(&t)
|
||||||
unmarshal_json(&t)
|
unmarshal_json(&t)
|
||||||
surrogate(&t)
|
surrogate(&t)
|
||||||
|
utf8_string_of_multibyte_characters(&t)
|
||||||
|
|
||||||
fmt.printf("%v/%v tests successful.\n", TEST_count - TEST_fail, TEST_count)
|
fmt.printf("%v/%v tests successful.\n", TEST_count - TEST_fail, TEST_count)
|
||||||
if TEST_fail > 0 {
|
if TEST_fail > 0 {
|
||||||
@@ -359,3 +360,10 @@ surrogate :: proc(t: ^testing.T) {
|
|||||||
expect(t, uerr == nil, fmt.tprintf("Expected `json.unmarshal(%q)` to return a nil error, got %v", string(out), uerr))
|
expect(t, uerr == nil, fmt.tprintf("Expected `json.unmarshal(%q)` to return a nil error, got %v", string(out), uerr))
|
||||||
expect(t, back == input, fmt.tprintf("Expected `json.unmarshal(%q)` to return %q, got %v", string(out), input, uerr))
|
expect(t, back == input, fmt.tprintf("Expected `json.unmarshal(%q)` to return %q, got %v", string(out), input, uerr))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@test
|
||||||
|
utf8_string_of_multibyte_characters :: proc(t: ^testing.T) {
|
||||||
|
_, err := json.parse_string(`"🐛✅"`)
|
||||||
|
msg := fmt.tprintf("Expected `json.parse` to return nil, got %v", err)
|
||||||
|
expect(t, err == nil, msg)
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user