From 073a7c9674c038f990d84c2707a980d998445c5e Mon Sep 17 00:00:00 2001 From: Alexander Medvednikov Date: Mon, 29 Jun 2026 15:45:04 +0300 Subject: [PATCH] ok --- vlib/v3/README.md | 4 ++-- vlib/v3/gen/c/cleanc.v | 6 ++++-- vlib/v3/parser/parser.v | 14 ++++++++++++++ vlib/v3/scanner/scanner.v | 8 ++------ 4 files changed, 22 insertions(+), 10 deletions(-) diff --git a/vlib/v3/README.md b/vlib/v3/README.md index c7be7589f..33559ae4d 100644 --- a/vlib/v3/README.md +++ b/vlib/v3/README.md @@ -215,8 +215,8 @@ v -gc none -prod -o v3 v3.v ``` The table uses the first v3-generated C stage, `./v3 -parallel -o v4 v3.v`. -Bundled TCC currently rejects the atomic helper shims on macOS and the driver -falls back to `cc`. +Debug builds use bundled TCC first, then fall back to `cc` only when that +compile fails. Pass `-c99` to the v3 C backend to compile generated C and support objects as C99 (`cc -std=c99`) instead of the default GNU11 mode. `test_all.vsh -c99` diff --git a/vlib/v3/gen/c/cleanc.v b/vlib/v3/gen/c/cleanc.v index 07927cbc0..458f6f076 100644 --- a/vlib/v3/gen/c/cleanc.v +++ b/vlib/v3/gen/c/cleanc.v @@ -4336,8 +4336,10 @@ fn (mut g FlatGen) headerless_libc_preamble() { g.writeln('typedef struct SRWLOCK { void* Ptr; } SRWLOCK;') g.writeln('typedef struct CONDITION_VARIABLE { void* Ptr; } CONDITION_VARIABLE;') g.writeln('typedef void* atomic_uintptr_t;') - g.writeln('#if !defined(__TINYC__) && !defined(__cplusplus) && !defined(_WCHAR_T) && !defined(_WCHAR_T_DEFINED) && !defined(__WCHAR_T) && !defined(__wchar_t_defined) && !defined(_BSD_WCHAR_T_DEFINED_) && !defined(_WCHAR_T_DECLARED)') - g.writeln('#ifdef _WIN32') + g.writeln('#if !defined(__cplusplus) && !defined(_WCHAR_T) && !defined(_WCHAR_T_DEFINED) && !defined(__WCHAR_T) && !defined(__wchar_t_defined) && !defined(_BSD_WCHAR_T_DEFINED_) && !defined(_WCHAR_T_DECLARED)') + g.writeln('#ifdef __WCHAR_TYPE__') + g.writeln('typedef __WCHAR_TYPE__ wchar_t;') + g.writeln('#elif defined(_WIN32)') g.writeln('typedef unsigned short wchar_t;') g.writeln('#else') g.writeln('typedef unsigned int wchar_t;') diff --git a/vlib/v3/parser/parser.v b/vlib/v3/parser/parser.v index a2bcf408b..56a9a8884 100644 --- a/vlib/v3/parser/parser.v +++ b/vlib/v3/parser/parser.v @@ -143,6 +143,20 @@ pub fn (mut p Parser) parse_into(path string) { }) } +fn (mut p Parser) reserve_for_source(src_len int) { + if src_len <= 0 { + return + } + node_cap := p.a.nodes.len + src_len / 6 + 64 + if node_cap > p.a.nodes.cap { + p.a.nodes.ensure_cap(node_cap) + } + child_cap := p.a.children.len + src_len / 10 + 64 + if child_cap > p.a.children.cap { + p.a.children.ensure_cap(child_cap) + } +} + // read_source_file_raw reads read source file raw input for parser. fn read_source_file_raw(path string) string { cpath := cstring_from_vstring(path) diff --git a/vlib/v3/scanner/scanner.v b/vlib/v3/scanner/scanner.v index 515ee8d9e..5bf45bf41 100644 --- a/vlib/v3/scanner/scanner.v +++ b/vlib/v3/scanner/scanner.v @@ -122,7 +122,6 @@ pub fn (mut s Scanner) scan() token.Token { s.insert_semi = false return .semicolon } - s.file.add_line(s.offset) return .eof } c := s.src[s.offset] @@ -166,7 +165,8 @@ pub fn (mut s Scanner) scan() token.Token { } for s.offset < s.src.len { c3 := s.src[s.offset] - if c3.is_alnum() || c3 == `_` { + if (c3 >= `a` && c3 <= `z`) || (c3 >= `A` && c3 <= `Z`) + || (c3 >= `0` && c3 <= `9`) || c3 == `_` { s.offset++ continue } @@ -457,7 +457,6 @@ fn (mut s Scanner) whitespace() { return } s.offset++ - s.file.add_line(s.offset) continue } break @@ -491,7 +490,6 @@ fn (mut s Scanner) comment() { c3 := s.peek_byte(1) if c2 == `\n` { s.offset++ - s.file.add_line(s.offset) } else if c2 == `/` && c3 == `*` { s.offset += 2 ml_comment_depth++ @@ -518,7 +516,6 @@ fn (mut s Scanner) string_literal(scan_as_raw bool, c_quote u8) { } if c == `\n` { s.offset++ - s.file.add_line(s.offset) continue } s.offset++ @@ -535,7 +532,6 @@ fn (mut s Scanner) string_literal(scan_as_raw bool, c_quote u8) { continue } else if c == `\n` { s.offset++ - s.file.add_line(s.offset) continue } else if c == `$` && s.peek_byte(1) == `{` { s.in_str_inter = true -- 2.39.5