snake_case consts

pull/2316/head
Alexander Medvednikov 2019-10-12 22:31:05 +03:00
parent 81f8b26127
commit a76165828b
17 changed files with 124 additions and 125 deletions

View File

@ -65,11 +65,11 @@ fn (v mut V) cc() {
if v.pref.build_mode == .build_module {
// Create the modules & out directory if it's not there.
mut out_dir := if v.dir.starts_with('vlib') {
'$v_modules_path${os.PathSeparator}cache${os.PathSeparator}$v.dir'
'$v_modules_path${os.path_separator}cache${os.path_separator}$v.dir'
} else {
'$v_modules_path${os.PathSeparator}$v.dir'
'$v_modules_path${os.path_separator}$v.dir'
}
pdir := out_dir.all_before_last(os.PathSeparator)
pdir := out_dir.all_before_last(os.path_separator)
if !os.dir_exists(pdir) {
os.mkdir_all(pdir)
}
@ -118,25 +118,25 @@ fn (v mut V) cc() {
}
else if v.pref.is_cache {
vexe := os.executable()
builtin_o_path := '$v_modules_path${os.PathSeparator}cache${os.PathSeparator}vlib${os.PathSeparator}builtin.o'
builtin_o_path := '$v_modules_path${os.path_separator}cache${os.path_separator}vlib${os.path_separator}builtin.o'
if os.file_exists(builtin_o_path) {
libs = builtin_o_path
} else {
println('$builtin_o_path not found... building module builtin')
os.system('$vexe build module vlib${os.PathSeparator}builtin')
os.system('$vexe build module vlib${os.path_separator}builtin')
}
for imp in v.table.imports {
if imp.contains('vweb') { continue } // not working
if imp == 'webview' { continue }
imp_path := imp.replace('.', os.PathSeparator)
path := '$v_modules_path${os.PathSeparator}cache${os.PathSeparator}vlib${os.PathSeparator}${imp_path}.o'
imp_path := imp.replace('.', os.path_separator)
path := '$v_modules_path${os.path_separator}cache${os.path_separator}vlib${os.path_separator}${imp_path}.o'
//println('adding ${imp_path}.o')
if os.file_exists(path) {
libs += ' ' + path
} else {
println('$path not found... building module $imp')
os.system('$vexe build module vlib${os.PathSeparator}$imp_path')
os.system('$vexe build module vlib${os.path_separator}$imp_path')
}
}
}

View File

@ -254,7 +254,7 @@ fn build_thirdparty_obj_file(path string, moduleflags []CFlag) {
mut cfiles := ''
for file in files {
if file.ends_with('.c') {
cfiles += '"' + os.realpath( parent + os.PathSeparator + file ) + '" '
cfiles += '"' + os.realpath( parent + os.path_separator + file ) + '" '
}
}
cc := find_c_compiler()

View File

@ -610,7 +610,7 @@ fn (v &V) v_files_from_dir(dir string) []string {
if file.ends_with('_c.v') && v.os == .js {
continue
}
res << '$dir${os.PathSeparator}$file'
res << '$dir${os.path_separator}$file'
}
return res
}
@ -619,7 +619,7 @@ fn (v &V) v_files_from_dir(dir string) []string {
fn (v mut V) add_v_files_to_compile() {
mut builtin_files := v.get_builtin_files()
// Builtin cache exists? Use it.
builtin_vh := '$v_modules_path${os.PathSeparator}vlib${os.PathSeparator}builtin.vh'
builtin_vh := '$v_modules_path${os.path_separator}vlib${os.path_separator}builtin.vh'
if v.pref.is_cache && os.file_exists(builtin_vh) {
v.cached_mods << 'builtin'
builtin_files = [builtin_vh]
@ -638,7 +638,7 @@ fn (v mut V) add_v_files_to_compile() {
mut p := v.new_parser_from_file(file)
// set mod so we dont have to resolve submodule
if v.pref.build_mode == .build_module &&
file.contains(v.mod.replace('.', os.PathSeparator)) {
file.contains(v.mod.replace('.', os.path_separator)) {
p.mod = v.mod
}
p.parse(.imports)
@ -662,8 +662,8 @@ fn (v mut V) add_v_files_to_compile() {
// use cached built module if exists
if v.pref.build_mode != .build_module && !mod.contains('vweb') {
mod_path := mod.replace('.', os.PathSeparator)
vh_path := '$v_modules_path${os.PathSeparator}vlib${os.PathSeparator}${mod_path}.vh'
mod_path := mod.replace('.', os.path_separator)
vh_path := '$v_modules_path${os.path_separator}vlib${os.path_separator}${mod_path}.vh'
if v.pref.is_cache && os.file_exists(vh_path) {
println('using cached module `$mod`: $vh_path')
v.cached_mods << mod
@ -689,9 +689,9 @@ fn (v &V) get_builtin_files() []string {
// .vh cache exists? Use it
$if js {
return v.v_files_from_dir('$v.vroot${os.PathSeparator}vlib${os.PathSeparator}builtin${os.PathSeparator}js')
return v.v_files_from_dir('$v.vroot${os.path_separator}vlib${os.path_separator}builtin${os.path_separator}js')
}
return v.v_files_from_dir('$v.vroot${os.PathSeparator}vlib${os.PathSeparator}builtin')
return v.v_files_from_dir('$v.vroot${os.path_separator}vlib${os.path_separator}builtin')
}
// get user files
@ -703,22 +703,22 @@ fn (v &V) get_user_files() []string {
mut user_files := []string
if v.pref.is_test && v.pref.is_stats {
user_files << [v.vroot, 'vlib', 'benchmark', 'tests', 'always_imported.v'].join( os.PathSeparator )
user_files << [v.vroot, 'vlib', 'benchmark', 'tests', 'always_imported.v'].join( os.path_separator )
}
// v volt/slack_test.v: compile all .v files to get the environment
// I need to implement user packages! TODO
is_test_with_imports := dir.ends_with('_test.v') &&
(dir.contains('${os.PathSeparator}volt') || dir.contains('${os.PathSeparator}c2volt'))// TODO
(dir.contains('${os.path_separator}volt') || dir.contains('${os.path_separator}c2volt'))// TODO
if is_test_with_imports {
user_files << dir
pos := dir.last_index(os.PathSeparator)
dir = dir.left(pos) + os.PathSeparator// TODO WHY IS THIS .neEDED?
pos := dir.last_index(os.path_separator)
dir = dir.left(pos) + os.path_separator// TODO WHY IS THIS .neEDED?
}
if dir.ends_with('.v') {
// Just compile one file and get parent dir
user_files << dir
dir = dir.all_before('${os.PathSeparator}')
dir = dir.all_before('${os.path_separator}')
}
else {
// Add .v files from the directory being compiled
@ -815,7 +815,7 @@ fn new_v(args[]string) &V {
// Create modules dirs if they are missing
if !os.dir_exists(v_modules_path) {
os.mkdir(v_modules_path)
os.mkdir('$v_modules_path${os.PathSeparator}cache')
os.mkdir('$v_modules_path${os.path_separator}cache')
}
mut vgen_buf := strings.new_builder(1000)
@ -829,10 +829,10 @@ fn new_v(args[]string) &V {
if 'run' in args {
dir = get_param_after(joined_args, 'run', '')
}
if dir.ends_with(os.PathSeparator) {
dir = dir.all_before_last(os.PathSeparator)
if dir.ends_with(os.path_separator) {
dir = dir.all_before_last(os.path_separator)
}
if dir.starts_with('.$os.PathSeparator') {
if dir.starts_with('.$os.path_separator') {
dir = dir.right(2)
}
if args.len < 2 {
@ -845,17 +845,17 @@ fn new_v(args[]string) &V {
build_mode = .build_module
// v build module ~/v/os => os.o
mod_path := if dir.contains('vlib') {
dir.all_after('vlib'+os.PathSeparator)
dir.all_after('vlib'+os.path_separator)
}
else if dir.starts_with('.\\') || dir.starts_with('./') {
dir.right(2)
}
else if dir.starts_with(os.PathSeparator) {
dir.all_after(os.PathSeparator)
else if dir.starts_with(os.path_separator) {
dir.all_after(os.path_separator)
} else {
dir
}
mod = mod_path.replace(os.PathSeparator, '.')
mod = mod_path.replace(os.path_separator, '.')
println('Building module "${mod}" (dir="$dir")...')
//out_name = '$TmpPath/vlib/${base}.o'
out_name = mod
@ -881,7 +881,7 @@ fn new_v(args[]string) &V {
}
// if we are in `/foo` and run `v .`, the executable should be `foo`
if dir == '.' && out_name == 'a.out' {
base := os.getwd().all_after(os.PathSeparator)
base := os.getwd().all_after(os.path_separator)
out_name = base.trim_space()
}
mut _os := OS.mac
@ -976,7 +976,7 @@ fn new_v(args[]string) &V {
println('C compiler=$pref.ccompiler')
}
if pref.is_so {
out_name_c = out_name.all_after(os.PathSeparator) + '_shared_lib.c'
out_name_c = out_name.all_after(os.path_separator) + '_shared_lib.c'
}
return &V{
os: _os

View File

@ -106,14 +106,14 @@ fn v_type_str(typ_ string) string {
fn (v &V) generate_vh() {
println('\n\n\n\nGenerating a V header file for module `$v.mod`')
mod_path := v.mod.replace('.', os.PathSeparator)
mod_path := v.mod.replace('.', os.path_separator)
dir := if v.dir.starts_with('vlib') {
'$v_modules_path${os.PathSeparator}$v.dir'
'$v_modules_path${os.path_separator}$v.dir'
} else {
'$v_modules_path${os.PathSeparator}$mod_path'
'$v_modules_path${os.path_separator}$mod_path'
}
path := dir + '.vh'
pdir := dir.all_before_last(os.PathSeparator)
pdir := dir.all_before_last(os.path_separator)
if !os.dir_exists(pdir) {
os.mkdir_all(pdir)
// os.mkdir(os.realpath(dir))

View File

@ -33,7 +33,7 @@ pub fn(graph &DepGraph) imports() []string {
fn (v &V) module_path(mod string) string {
// submodule support
if mod.contains('.') {
return mod.replace('.', os.PathSeparator)
return mod.replace('.', os.path_separator)
// return mod.replace('.', '/')
}
return mod
@ -45,15 +45,15 @@ fn (v &V) module_path(mod string) string {
fn (v &V) find_module_path(mod string) ?string {
mod_path := v.module_path(mod)
// First check for local modules in the same directory
mut import_path := os.getwd() + '${os.PathSeparator}$mod_path'
mut import_path := os.getwd() + '${os.path_separator}$mod_path'
// Now search in vlib/
if !os.dir_exists(import_path) {
import_path = '$v.lang_dir${os.PathSeparator}vlib${os.PathSeparator}$mod_path'
import_path = '$v.lang_dir${os.path_separator}vlib${os.path_separator}$mod_path'
}
//println('ip=$import_path')
// Finally try modules installed with vpm (~/.vmodules)
if !os.dir_exists(import_path) {
import_path = '$v_modules_path${os.PathSeparator}$mod_path'
import_path = '$v_modules_path${os.path_separator}$mod_path'
if !os.dir_exists(import_path){
return error('module "$mod" not found')
}
@ -67,4 +67,4 @@ fn mod_gen_name(mod string) string {
fn mod_gen_name_rev(mod string) string {
return mod.replace('_dot_', '.')
}
}

View File

@ -191,7 +191,7 @@ fn find_msvc() ?MsvcResult {
}
return MsvcResult {
full_cl_exe_path: os.realpath( vs.exe_path + os.PathSeparator + 'cl.exe' )
full_cl_exe_path: os.realpath( vs.exe_path + os.path_separator + 'cl.exe' )
exe_path: vs.exe_path,
um_lib_path: wk.um_lib_path,
@ -388,7 +388,7 @@ fn build_thirdparty_obj_file_with_msvc(path string, moduleflags []CFlag) {
mut cfiles := ''
for file in files {
if file.ends_with('.c') {
cfiles += '"' + os.realpath( parent + os.PathSeparator + file ) + '" '
cfiles += '"' + os.realpath( parent + os.path_separator + file ) + '" '
}
}
@ -441,7 +441,7 @@ fn (cflags []CFlag) msvc_string_flags() MsvcStringFlags {
}
else if flag.name == '-L' {
lib_paths << flag.value
lib_paths << flag.value + os.PathSeparator + 'msvc'
lib_paths << flag.value + os.path_separator + 'msvc'
// The above allows putting msvc specific .lib files in a subfolder msvc/ ,
// where gcc will NOT find them, but cl will do...
// NB: gcc is smart enough to not need .lib files at all in most cases, the .dll is enough.

View File

@ -122,7 +122,7 @@ fn (v mut V) new_parser_from_file(path string) Parser {
mut p := v.new_parser(new_scanner_file(path), path)
p = { p|
file_path: path,
file_name: path.all_after(os.PathSeparator),
file_name: path.all_after(os.path_separator),
file_platform: path_platform,
file_pcguard: path_pcguard,
is_script: (v.pref.is_script && os.realpath(path) == os.realpath(path)),
@ -518,8 +518,8 @@ fn (p mut Parser) const_decl() {
continue
}
mut name := p.check_name() // `Age = 20`
if p.mod != 'os' && contains_capital(name) {
//p.warn('const names cannot contain uppercase letters, use snake_case instead')
if !p.pref.building_v && p.mod != 'os' && contains_capital(name) {
p.warn('const names cannot contain uppercase letters, use snake_case instead')
}
name = p.prepend_mod(name)
mut typ := ''

View File

@ -725,7 +725,7 @@ fn (s mut Scanner) debug_tokens() {
s.started = false
s.debug = true
fname := s.file_path.all_after(os.PathSeparator)
fname := s.file_path.all_after(os.path_separator)
println('\n===DEBUG TOKENS $fname===')
for {

View File

@ -778,14 +778,14 @@ fn (table &Table) cgen_name_type_pair(name, typ string) string {
fn is_valid_int_const(val, typ string) bool {
x := val.int()
switch typ {
case 'byte': return 0 <= x && x <= math.MaxU8
case 'u16': return 0 <= x && x <= math.MaxU16
case 'byte': return 0 <= x && x <= math.max_u8
case 'u16': return 0 <= x && x <= math.max_u16
//case 'u32': return 0 <= x && x <= math.MaxU32
//case 'u64': return 0 <= x && x <= math.MaxU64
//////////////
case 'i8': return math.MinI8 <= x && x <= math.MaxI8
case 'i16': return math.MinI16 <= x && x <= math.MaxI16
case 'int': return math.MinI32 <= x && x <= math.MaxI32
case 'i8': return math.min_i8 <= x && x <= math.max_i8
case 'i16': return math.min_i16 <= x && x <= math.max_i16
case 'int': return math.min_i32 <= x && x <= math.max_i32
//case 'i64':
//x64 := val.i64()
//return i64(-(1<<63)) <= x64 && x64 <= i64((1<<63)-1)
@ -870,7 +870,7 @@ fn (table &Table) qualify_module(mod string, file_path string) string {
for m in table.imports {
if m.contains('.') && m.contains(mod) {
m_parts := m.split('.')
m_path := m_parts.join(os.PathSeparator)
m_path := m_parts.join(os.path_separator)
if mod == m_parts[m_parts.len-1] && file_path.contains(m_path) {
return m
}

View File

@ -11,12 +11,12 @@ pub:
pub fn full_path_to_v() string {
vname := if os.user_os() == 'windows' { 'v.exe' } else { 'v' }
vexec := os.dir(os.dir(os.dir(os.dir( os.executable() )))) + os.PathSeparator + vname
vexec := os.dir(os.dir(os.dir(os.dir( os.executable() )))) + os.path_separator + vname
/*
args := os.args
vreal := os.realpath('v')
myself := os.realpath( os.executable() )
wd := os.getwd() + os.PathSeparator
wd := os.getwd() + os.path_separator
println('args are: $args')
println('vreal : $vreal')
println('myself : $myself')
@ -76,7 +76,7 @@ $diff
}
pub fn new_options() RunnerOptions {
wd := os.getwd() + os.PathSeparator
wd := os.getwd() + os.path_separator
vexec := full_path_to_v()
mut files := []string
if os.args.len > 1 {

View File

@ -56,7 +56,7 @@ fn test_v() {
}
if os.dir_exists(targ) {
ts.files << os.walk_ext( targ.trim_right(os.PathSeparator), '_test.v')
ts.files << os.walk_ext( targ.trim_right(os.path_separator), '_test.v')
continue
}
println('Unrecognized test file $targ .')

View File

@ -172,7 +172,7 @@ fn (c Context) compare_v_performance( commands []string ) {
for cmd in commands { hyperfine_commands_arguments << ' \'cd ${c.b:30s} ; ./$cmd \' ' }
for cmd in commands { hyperfine_commands_arguments << ' \'cd ${c.a:30s} ; ./$cmd \' ' }
///////////////////////////////////////////////////////////////////////////////
cmd_stats_file := os.realpath([ c.workdir, 'v_performance_stats.json'].join(os.PathSeparator))
cmd_stats_file := os.realpath([ c.workdir, 'v_performance_stats.json'].join(os.path_separator))
comparison_cmd := 'hyperfine $c.hyperfineopts '+
'--export-json ${cmd_stats_file} '+
'--time-unit millisecond '+
@ -187,7 +187,7 @@ fn (c Context) compare_v_performance( commands []string ) {
fn (c Context) normalized_workpath_for_commit( commit string ) string {
nc := 'v_at_' + commit.replace('^','_').replace('-','_').replace('/','_')
return os.realpath( c.workdir + os.PathSeparator + nc )
return os.realpath( c.workdir + os.path_separator + nc )
}
fn validate_commit_exists( commit string ){

View File

@ -9,36 +9,36 @@ module math
// All functions are sorted alphabetically.
const (
E = 2.71828182845904523536028747135266249775724709369995957496696763
Pi = 3.14159265358979323846264338327950288419716939937510582097494459
Phi = 1.61803398874989484820458683436563811772030917980576286213544862
Tau = 6.28318530717958647692528676655900576839433879875021164194988918
e = 2.71828182845904523536028747135266249775724709369995957496696763
pi = 3.14159265358979323846264338327950288419716939937510582097494459
phi = 1.61803398874989484820458683436563811772030917980576286213544862
tau = 6.28318530717958647692528676655900576839433879875021164194988918
Sqrt2 = 1.41421356237309504880168872420969807856967187537694807317667974
SqrtE = 1.64872127070012814684865078781416357165377610071014801157507931
SqrtPi = 1.77245385090551602729816748334114518279754945612238712821380779
SqrtTau = 2.50662827463100050241576528481104525300698674060993831662992357
SqrtPhi = 1.27201964951406896425242246173749149171560804184009624861664038
sqrt2 = 1.41421356237309504880168872420969807856967187537694807317667974
sqrt_e = 1.64872127070012814684865078781416357165377610071014801157507931
sqrt_pi = 1.77245385090551602729816748334114518279754945612238712821380779
sqrt_tau = 2.50662827463100050241576528481104525300698674060993831662992357
sqrt_phi = 1.27201964951406896425242246173749149171560804184009624861664038
Ln2 = 0.693147180559945309417232121458176568075500134360255254120680009
Log2E = 1.0 / Ln2
Ln10 = 2.30258509299404568401799145468436420760110148862877297603332790
Log10E = 1.0 / Ln10
ln2 = 0.693147180559945309417232121458176568075500134360255254120680009
log2_e = 1.0 / ln2
ln10 = 2.30258509299404568401799145468436420760110148862877297603332790
log10_e = 1.0 / ln10
)
const (
MaxI8 = 127
MinI8 = -128
MaxI16 = 32767
MinI16 = -32768
MaxI32 = 2147483647
MinI32 = -2147483648
max_i8 = 127
min_i8 = -128
max_i16 = 32767
min_i16 = -32768
max_i32 = 2147483647
min_i32 = -2147483648
// MaxI64 = ((1<<63) - 1)
// MinI64 = (-(1 << 63) )
MaxU8 = 255
MaxU16 = 65535
MaxU32 = 4294967295
MaxU64 = 18446744073709551615
max_u8 = 255
max_u16 = 65535
max_u32 = 4294967295
max_u64 = 18446744073709551615
)
// Returns the absolute value.
@ -93,7 +93,7 @@ pub fn cosh(a f64) f64 {
// degrees convert from degrees to radians.
pub fn degrees(radians f64) f64 {
return radians * (180.0 / Pi)
return radians * (180.0 / pi)
}
// exp calculates exponent of the number (math.pow(math.E, a)).
@ -277,7 +277,7 @@ pub fn pow(a, b f64) f64 {
// radians convert from radians to degrees.
pub fn radians(degrees f64) f64 {
return degrees * (Pi / 180.0)
return degrees * (pi / 180.0)
}
// round returns the integer nearest to the provided value.

View File

@ -485,7 +485,7 @@ pub fn dir(path string) string {
if path == '.' {
return getwd()
}
pos := path.last_index(PathSeparator)
pos := path.last_index(path_separator)
if pos == -1 {
return '.'
}
@ -502,7 +502,7 @@ fn path_sans_ext(path string) string {
pub fn basedir(path string) string {
pos := path.last_index(PathSeparator)
pos := path.last_index(path_separator)
if pos == -1 {
return path
}
@ -510,7 +510,7 @@ pub fn basedir(path string) string {
}
pub fn filename(path string) string {
return path.all_after(PathSeparator)
return path.all_after(path_separator)
}
// get_line returns a one-line string from stdin
@ -626,7 +626,7 @@ pub fn home_dir() string {
}
home += homepath
}
home += PathSeparator
home += path_separator
return home
}
@ -795,7 +795,7 @@ pub fn walk_ext(path, ext string) []string {
if file.starts_with('.') {
continue
}
p := path + PathSeparator + file
p := path + path_separator + file
if os.is_dir(p) {
res << walk_ext(p, ext)
}
@ -859,9 +859,9 @@ pub fn print_backtrace() {
}
pub fn mkdir_all(path string) {
mut p := if path.starts_with(os.PathSeparator) { os.PathSeparator } else { '' }
for subdir in path.split(os.PathSeparator) {
p += subdir + os.PathSeparator
mut p := if path.starts_with(os.path_separator) { os.path_separator } else { '' }
for subdir in path.split(os.path_separator) {
p += subdir + os.path_separator
if !os.dir_exists(p) {
os.mkdir(p)
}

View File

@ -4,7 +4,6 @@ module os
#include <unistd.h>
const (
PathSeparator = '/'
path_separator = '/'
)

View File

@ -4,7 +4,6 @@ module os
#include <winsock2.h>
const (
PathSeparator = '\\'
path_separator = '\\'
)

View File

@ -7,7 +7,7 @@ module time
import rand
const (
MonthDays = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
month_days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
)
#include <time.h>
@ -60,17 +60,17 @@ const (
// The unsigned zero year for internal calculations.
// Must be 1 mod 400, and times before it will not compute correctly,
// but otherwise can be changed at will.
absoluteZeroYear = i64(-292277022399)
absolute_zero_year = i64(-292277022399)
secondsPerMinute = 60
secondsPerHour = 60 * secondsPerMinute
secondsPerDay = 24 * secondsPerHour
secondsPerWeek = 7 * secondsPerDay
daysPer400Years = 365*400 + 97
daysPer100Years = 365*100 + 24
daysPer4Years = 365*4 + 1
seconds_per_minute = 60
seconds_per_hour = 60 * seconds_per_minute
seconds_per_day = 24 * seconds_per_hour
seconds_per_week = 7 * seconds_per_day
days_per_400_years = 365*400 + 97
days_per_100_years = 365*100 + 24
days_per_4_years = 365*4 + 1
daysBefore = [
days_before = [
0,
31,
31 + 28,
@ -88,33 +88,38 @@ const (
)
const (
months_string = 'JanFebMarAprMayJunJulAugSepOctNovDec'
days_string = 'MonTueWedThuFriSatSun'
)
// Based on Go's time package.
// Copyright 2009 The Go Authors.
pub fn unix(abs int) Time {
// Split into time and day.
mut d := abs / secondsPerDay
mut d := abs / seconds_per_day
// Account for 400 year cycles.
mut n := d / daysPer400Years
mut n := d / days_per_400_years
mut y := 400 * n
d -= daysPer400Years * n
d -= days_per_400_years * n
// Cut off 100-year cycles.
// The last cycle has one extra leap year, so on the last day
// of that year, day / daysPer100Years will be 4 instead of 3.
// of that year, day / days_per_100_years will be 4 instead of 3.
// Cut it back down to 3 by subtracting n>>2.
n = d / daysPer100Years
n = d / days_per_100_years
n -= n >> 2
y += 100 * n
d -= daysPer100Years * n
d -= days_per_100_years * n
// Cut off 4-year cycles.
// The last cycle has a missing leap year, which does not
// affect the computation.
n = d / daysPer4Years
n = d / days_per_4_years
y += 4 * n
d -= daysPer4Years * n
d -= days_per_4_years * n
// Cut off years within a 4-year cycle.
// The last year is a leap year, so on the last day of that year,
@ -128,10 +133,10 @@ pub fn unix(abs int) Time {
yday := int(d)
mut day := yday
year := abs / int(3.154e+7) + 1970 //int(i64(y) + absoluteZeroYear)
hour := int(abs%secondsPerDay) / secondsPerHour
minute := int(abs % secondsPerHour) / secondsPerMinute
second := int(abs % secondsPerMinute)
year := abs / int(3.154e+7) + 1970 //int(i64(y) + absolute_zero_year)
hour := int(abs%seconds_per_day) / seconds_per_hour
minute := int(abs % seconds_per_hour) / seconds_per_minute
second := int(abs % seconds_per_minute)
if is_leap_year(year) {
// Leap year
@ -149,12 +154,12 @@ pub fn unix(abs int) Time {
// The estimate may be too low by at most one month, so adjust.
mut month := day / 31
mut begin := 0
end := int(daysBefore[month+1])
end := int(days_before[month+1])
if day >= end {
month++
begin = end
} else {
begin = int(daysBefore[month])
begin = int(days_before[month])
}
month++ // because January is 1
@ -182,14 +187,10 @@ pub fn (t Time) format() string {
return '${t.year}-${t.month:02d}-${t.day:02d} ${t.hour:02d}:${t.minute:02d}'
}
const (
Months = 'JanFebMarAprMayJunJulAugSepOctNovDec'
Days = 'MonTueWedThuFriSatSun'
)
pub fn (t Time) smonth() string {
i := t.month - 1
return Months.substr(i * 3, (i + 1) * 3)
return months_string.substr(i * 3, (i + 1) * 3)
}
// 21:04
@ -386,7 +387,7 @@ pub fn (t Time) day_of_week() int {
// weekday_str() returns the current day in string (upto 3 characters)
pub fn (t Time) weekday_str() string {
i := t.day_of_week() - 1
return Days.substr(i * 3, (i + 1) * 3)
return days_string.substr(i * 3, (i + 1) * 3)
}
struct C.timeval {
@ -450,6 +451,6 @@ pub fn days_in_month(month, year int) ?int {
return error('Invalid month: $month')
}
extra := if month == 2 && is_leap_year(year) {1} else {0}
res := MonthDays[month-1] + extra
res := month_days[month-1] + extra
return res
}