From c563168d69c8a760e727ee8c205de4c882f6d1f1 Mon Sep 17 00:00:00 2001 From: Alexander Medvednikov Date: Wed, 15 Jul 2020 21:36:06 +0200 Subject: [PATCH] rand: string() --- vlib/rand/rand.v | 12 ++++++++++++ vlib/strings/strings.v | 1 - vlib/v/builder/compile.v | 2 +- vlib/v/gen/fn.v | 11 +++++++++-- 4 files changed, 22 insertions(+), 4 deletions(-) diff --git a/vlib/rand/rand.v b/vlib/rand/rand.v index b5de9309c7..afd2107a39 100644 --- a/vlib/rand/rand.v +++ b/vlib/rand/rand.v @@ -128,3 +128,15 @@ pub fn f32_in_range(min, max f32) f32 { pub fn f64_in_range(min, max f64) f64 { return default_rng.f64_in_range(min, max) } + +const ( + chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' +) + +pub fn string(len int) string { + mut buf := malloc(len) + for i in 0..len { + buf[i] = chars[intn(chars.len)] + } + return string(buf, len) +} diff --git a/vlib/strings/strings.v b/vlib/strings/strings.v index 25d751b68a..9bf3f3a299 100644 --- a/vlib/strings/strings.v +++ b/vlib/strings/strings.v @@ -4,7 +4,6 @@ module strings // random returns a random string with `n` characters /* -// TODO pub fn random(n int) string { buf := vmalloc(n) for i in 0..n { diff --git a/vlib/v/builder/compile.v b/vlib/v/builder/compile.v index 8edf129306..8fe4cc2f0a 100644 --- a/vlib/v/builder/compile.v +++ b/vlib/v/builder/compile.v @@ -167,7 +167,7 @@ Did you forget to add vlib to the path? (Use @vlib for default vlib)') } pub fn (v &Builder) get_user_files() []string { - if v.pref.path in ['vlib/builtin', 'vlib/strconv'] { + if v.pref.path in ['vlib/builtin', 'vlib/strconv', 'vlib/strings', 'vlib/hash'] { // get_builtin_files() has already added the builtin files: v.log('Skipping user files.') return [] diff --git a/vlib/v/gen/fn.v b/vlib/v/gen/fn.v index 1c04cb47dc..358080c645 100644 --- a/vlib/v/gen/fn.v +++ b/vlib/v/gen/fn.v @@ -90,8 +90,15 @@ fn (mut g Gen) gen_fn_decl(it ast.FnDecl) { } } else { if !(it.is_pub || g.pref.is_debug) { - g.write('static ') - g.definitions.write('static ') + // Private functions need to marked as static so that they are not exportable in the + // binaries + if g.pref.build_mode != .build_module { + // if !(g.pref.build_mode == .build_module && g.is_builtin_mod) { + // If we are building vlib/builtin, we need all private functions like array_get + // to be public, so that all V programs can access them. + g.write('static ') + g.definitions.write('static ') + } } fn_header := if msvc_attrs.len > 0 { '$type_name $msvc_attrs ${name}(' } else { '$type_name ${name}(' } g.definitions.write(fn_header)