rename ModPath to v_modules_path; do not allow long variable names without _
							parent
							
								
									8b8cd13929
								
							
						
					
					
						commit
						ee8ff39454
					
				|  | @ -64,13 +64,13 @@ fn (v mut V) cc() { | |||
| 	} | ||||
| 	if v.pref.build_mode == .build_module { | ||||
| 		// Create the modules directory if it's not there.
 | ||||
| 		if !os.file_exists(ModPath)  { | ||||
| 			os.mkdir(ModPath) | ||||
| 		if !os.file_exists(v_modules_path)  { | ||||
| 			os.mkdir(v_modules_path) | ||||
| 		} | ||||
| 		v.out_name = ModPath + v.dir + '.o' //v.out_name
 | ||||
| 		v.out_name = v_modules_path + v.dir + '.o' //v.out_name
 | ||||
| 		println('Building ${v.out_name}...') | ||||
| 	} | ||||
|    | ||||
| 
 | ||||
| 	mut debug_options := '-g' | ||||
| 	mut optimization_options := '-O2' | ||||
| 	if v.pref.ccompiler.contains('clang') { | ||||
|  | @ -113,7 +113,7 @@ fn (v mut V) cc() { | |||
| 		//
 | ||||
| 	} | ||||
| 	else if v.pref.build_mode == .default_mode { | ||||
| 		libs = '$ModPath/vlib/builtin.o' | ||||
| 		libs = '$v_modules_path/vlib/builtin.o' | ||||
| 		if !os.file_exists(libs) { | ||||
| 			println('object file `$libs` not found') | ||||
| 			exit(1) | ||||
|  | @ -122,7 +122,7 @@ fn (v mut V) cc() { | |||
| 			if imp == 'webview' { | ||||
| 				continue | ||||
| 			} | ||||
| 			libs += ' "$ModPath/vlib/${imp}.o"' | ||||
| 			libs += ' "$v_modules_path/vlib/${imp}.o"' | ||||
| 		} | ||||
| 	} | ||||
| 	if v.pref.sanitize { | ||||
|  | @ -130,7 +130,7 @@ fn (v mut V) cc() { | |||
| 	} | ||||
| 	// Cross compiling linux TODO
 | ||||
| 	/* | ||||
| 	sysroot := '/Users/alex/tmp/lld/linuxroot/' | ||||
| 	sysroot := '/tmp/lld/linuxroot/' | ||||
| 	if v.os == .linux && !linux_host { | ||||
| 		// Build file.o
 | ||||
| 		a << '-c --sysroot=$sysroot -target x86_64-linux-gnu' | ||||
|  | @ -288,23 +288,23 @@ fn (c mut V) cc_windows_cross() { | |||
| 	args += cflags.c_options_before_target() | ||||
| 	mut libs := '' | ||||
| 	if c.pref.build_mode == .default_mode { | ||||
| 		libs = '"$ModPath/vlib/builtin.o"' | ||||
| 		libs = '"$v_modules_path/vlib/builtin.o"' | ||||
| 		if !os.file_exists(libs) { | ||||
| 				println('`$libs` not found') | ||||
| 				exit(1) | ||||
| 		} | ||||
| 		for imp in c.table.imports { | ||||
| 				libs += ' "$ModPath/vlib/${imp}.o"' | ||||
| 				libs += ' "$v_modules_path/vlib/${imp}.o"' | ||||
| 		} | ||||
| 	} | ||||
| 	args += ' $c.out_name_c ' | ||||
| 	args += cflags.c_options_after_target() | ||||
| 	println('Cross compiling for Windows...') | ||||
| 	winroot := '$ModPath/winroot' | ||||
| 	winroot := '$v_modules_path/winroot' | ||||
| 	if !os.dir_exists(winroot) { | ||||
| 		winroot_url := 'https://github.com/vlang/v/releases/download/v0.1.10/winroot.zip' | ||||
| 		println('"$winroot" not found.') | ||||
| 		println('Download it from $winroot_url and save it in $ModPath') | ||||
| 		println('Download it from $winroot_url and save it in $v_modules_path') | ||||
| 		println('Unzip it afterwards.\n') | ||||
| 		println('winroot.zip contains all library and header files needed '+ | ||||
| 			'to cross-compile for Windows.') | ||||
|  | @ -314,7 +314,7 @@ fn (c mut V) cc_windows_cross() { | |||
| 	obj_name = obj_name.replace('.exe', '') | ||||
| 	obj_name = obj_name.replace('.o.o', '.o') | ||||
| 	include := '-I $winroot/include ' | ||||
| 	cmd := 'clang -o $obj_name -w $include -m32 -c -target x86_64-win32 $ModPath/$c.out_name_c' | ||||
| 	cmd := 'clang -o $obj_name -w $include -m32 -c -target x86_64-win32 $v_modules_path/$c.out_name_c' | ||||
| 	if c.pref.show_c_cmd { | ||||
| 			println(cmd) | ||||
| 	} | ||||
|  |  | |||
|  | @ -150,7 +150,7 @@ fn (p mut Parser) chash() { | |||
| 		mut flag := hash.right(5) | ||||
| 		// expand `@VROOT` `@VMOD` to absolute path
 | ||||
| 		flag = flag.replace('@VROOT', p.vroot) | ||||
| 		flag = flag.replace('@VMOD', ModPath) | ||||
| 		flag = flag.replace('@VMOD', v_modules_path) | ||||
| 		//p.log('adding flag "$flag"')
 | ||||
| 		p.table.parse_cflag(flag, p.mod) | ||||
| 		return | ||||
|  |  | |||
|  | @ -137,7 +137,7 @@ fn (p mut Parser) clear_vars() { | |||
| // vlib header file?
 | ||||
| fn (p mut Parser) is_sig() bool { | ||||
| 	return (p.pref.build_mode == .default_mode || p.pref.build_mode == .build_module) && | ||||
| 	(p.file_path.contains(ModPath)) | ||||
| 	(p.file_path.contains(v_modules_path)) | ||||
| } | ||||
| 
 | ||||
| // Function signatures are added to the top of the .c file in the first run.
 | ||||
|  | @ -1027,8 +1027,9 @@ fn (f &Fn) typ_str() string { | |||
| 	return sb.str() | ||||
| } | ||||
| 
 | ||||
| // "fn foo(a int) stirng", for .vh module headers
 | ||||
| fn (f &Fn) v_definition() string { | ||||
| 	return 'todo' | ||||
| 	return 'fn '//$f.name(${f.str_args()})'
 | ||||
| } | ||||
| 
 | ||||
| // f.args => "int a, string b"
 | ||||
|  |  | |||
|  | @ -29,7 +29,7 @@ enum BuildMode { | |||
| const ( | ||||
| 	supported_platforms = ['windows', 'mac', 'linux', 'freebsd', 'openbsd', | ||||
| 		'netbsd', 'dragonfly', 'msvc', 'android', 'js', 'solaris'] | ||||
| 	ModPath            = os.home_dir() + '/.vmodules/' | ||||
| 	v_modules_path            = os.home_dir() + '/.vmodules/' | ||||
| ) | ||||
| 
 | ||||
| enum OS { | ||||
|  | @ -40,8 +40,8 @@ enum OS { | |||
| 	openbsd | ||||
| 	netbsd | ||||
| 	dragonfly | ||||
| 	msvc | ||||
| 	js | ||||
| 	msvc // TODO not an OS
 | ||||
| 	js // TODO
 | ||||
| 	android | ||||
| 	solaris | ||||
| } | ||||
|  | @ -74,7 +74,7 @@ mut: | |||
| 	vroot      string | ||||
| 	mod        string  // module being built with -lib
 | ||||
| 	parsers    []Parser | ||||
| 	vgen_buf   strings.Builder | ||||
| 	vgen_buf   strings.Builder // temporary buffer for generated V code (.str() etc)
 | ||||
| } | ||||
| 
 | ||||
| struct Preferences { | ||||
|  | @ -105,6 +105,11 @@ mut: | |||
| 	building_v bool | ||||
| 	autofree   bool | ||||
| 	compress   bool | ||||
| 	// Skips re-compilation of the builtin module
 | ||||
| 	// to increase compilation time.
 | ||||
| 	// This is on by default, since a vast majority of users do not
 | ||||
| 	// work on the builtin module itself.
 | ||||
| 	skip_builtin bool | ||||
| } | ||||
| 
 | ||||
| fn main() { | ||||
|  | @ -143,19 +148,12 @@ fn main() { | |||
| 	// TODO quit if the compiler is too old
 | ||||
| 	// u := os.file_last_mod_unix('v')
 | ||||
| 	// If there's no tmp path with current version yet, the user must be using a pre-built package
 | ||||
| 	// Copy the `vlib` directory to the tmp path.
 | ||||
| /* | ||||
| 	// TODO
 | ||||
| 	if !os.file_exists(TmpPath) && os.file_exists('vlib') { | ||||
| 	} | ||||
| */ | ||||
| 	//
 | ||||
| 	// Just fmt and exit
 | ||||
| 	if 'fmt' in args { | ||||
| 		vfmt(args) | ||||
| 		return | ||||
| 	} | ||||
| 	 | ||||
| 
 | ||||
| 	// Construct the V object from command line arguments
 | ||||
| 	mut v := new_v(args) | ||||
| 	if args.join(' ').contains(' test v') { | ||||
|  | @ -629,7 +627,7 @@ fn (v mut V) add_v_files_to_compile() { | |||
| 		for i := 0; i < v.table.imports.len; i++ { | ||||
| 			mod := v.table.imports[i] | ||||
| 			mod_path := v.module_path(mod) | ||||
| 			import_path := '$ModPath/vlib/$mod_path' | ||||
| 			import_path := '$v_modules_path/vlib/$mod_path' | ||||
| 			vfiles := v.v_files_from_dir(import_path) | ||||
| 			if vfiles.len == 0 { | ||||
| 				verror('cannot import module $mod (no .v files in "$import_path")') | ||||
|  | @ -686,7 +684,7 @@ fn (v mut V) add_v_files_to_compile() { | |||
| 		// These were generated by vfmt
 | ||||
| /* | ||||
| 		if v.pref.build_mode == .default_mode || v.pref.build_mode == .build_module { | ||||
| 			module_path = '$ModPath/vlib/$mod_p' | ||||
| 			module_path = '$v_modules_path/vlib/$mod_p' | ||||
| 		} | ||||
| */ | ||||
| 		if mod == 'builtin' { continue } // builtin files were already added
 | ||||
|  | @ -1025,12 +1023,12 @@ fn install_v(args[]string) { | |||
| 	if true { | ||||
| 		//println('Building vget...')
 | ||||
| 		os.chdir(vroot + '/tools') | ||||
| 		vgetcompilation := os.exec('$vexec -o $vget vget.v') or { | ||||
| 		vget_compilation := os.exec('$vexec -o $vget vget.v') or { | ||||
| 			verror(err) | ||||
| 			return | ||||
| 		} | ||||
| 		if vgetcompilation.exit_code != 0 { | ||||
| 			verror( vgetcompilation.output ) | ||||
| 		if vget_compilation.exit_code != 0 { | ||||
| 			verror( vget_compilation.output ) | ||||
| 			return | ||||
| 		} | ||||
| 	} | ||||
|  | @ -1052,7 +1050,7 @@ fn (v &V) test_vget() { | |||
| 		println('failed to run v install') | ||||
| 		exit(1) | ||||
| 	}	 | ||||
| 	if !os.file_exists(ModPath + '/nedpals/args') { | ||||
| 	if !os.file_exists(v_modules_path + '/nedpals/args') { | ||||
| 		println('v failed to install a test module') | ||||
| 		exit(1) | ||||
| 	}	 | ||||
|  | @ -1080,7 +1078,7 @@ fn (v &V) test_v() { | |||
| 	for dot_relative_file in test_files {		 | ||||
| 		relative_file := dot_relative_file.replace('./', '') | ||||
| 		file := os.realpath( relative_file ) | ||||
| 		tmpcfilepath := file.replace('_test.v', '_test.tmp.c') | ||||
| 		tmpc_filepath := file.replace('_test.v', '_test.tmp.c') | ||||
| 		 | ||||
| 		mut cmd := '"$vexe" $joined_args -debug "$file"' | ||||
| 		if os.user_os() == 'windows' { cmd = '"$cmd"' } | ||||
|  | @ -1100,7 +1098,7 @@ fn (v &V) test_v() { | |||
| 			tmark.ok() | ||||
| 			println(tmark.step_message('$relative_file OK')) | ||||
| 		} | ||||
| 		os.rm( tmpcfilepath ) | ||||
| 		os.rm( tmpc_filepath ) | ||||
| 	} | ||||
| 	tmark.stop() | ||||
| 	println( tmark.total_message('running V tests') ) | ||||
|  | @ -1113,7 +1111,7 @@ fn (v &V) test_v() { | |||
| 			continue | ||||
| 		}	 | ||||
| 		file := os.realpath( relative_file ) | ||||
| 		tmpcfilepath := file.replace('.v', '.tmp.c') | ||||
| 		tmpc_filepath := file.replace('.v', '.tmp.c') | ||||
| 		mut cmd := '"$vexe" $joined_args -debug "$file"' | ||||
| 		if os.user_os() == 'windows' { cmd = '"$cmd"' } | ||||
| 		bmark.step() | ||||
|  | @ -1131,7 +1129,7 @@ fn (v &V) test_v() { | |||
| 			bmark.ok() | ||||
| 			println(bmark.step_message('$relative_file OK')) | ||||
| 		} | ||||
| 		os.rm(tmpcfilepath) | ||||
| 		os.rm(tmpc_filepath) | ||||
| 	} | ||||
| 	bmark.stop() | ||||
| 	println( bmark.total_message('building examples') ) | ||||
|  |  | |||
|  | @ -43,7 +43,7 @@ fn (v &V) find_module_path(mod string) string { | |||
| 	//println('ip=$import_path')
 | ||||
| 	// Finally try modules installed with vpm (~/.vmodules)
 | ||||
| 	if !os.dir_exists(import_path) { | ||||
| 		import_path = '$ModPath/$mod_path' | ||||
| 		import_path = '$v_modules_path/$mod_path' | ||||
| 		if !os.dir_exists(import_path){ | ||||
| 			verror('module "$mod" not found') | ||||
| 		} | ||||
|  |  | |||
|  | @ -255,7 +255,7 @@ pub fn (v mut V) cc_msvc() { | |||
| 		// 
 | ||||
| 	} | ||||
| 	else if v.pref.build_mode == .default_mode { | ||||
| 		b := os.realpath( '$ModPath/vlib/builtin.obj' ) | ||||
| 		b := os.realpath( '$v_modules_path/vlib/builtin.obj' ) | ||||
| 		alibs << '"$b"' | ||||
| 		if !os.file_exists(b) { | ||||
| 			println('`builtin.obj` not found') | ||||
|  | @ -265,7 +265,7 @@ pub fn (v mut V) cc_msvc() { | |||
| 			if imp == 'webview' { | ||||
| 				continue | ||||
| 			} | ||||
| 			alibs << '"' + os.realpath( '$ModPath/vlib/${imp}.obj' ) + '"' | ||||
| 			alibs << '"' + os.realpath( '$v_modules_path/vlib/${imp}.obj' ) + '"' | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
|  |  | |||
|  | @ -168,7 +168,7 @@ fn (p mut Parser) scan_tokens() { | |||
| 				tok: res.tok | ||||
| 				lit: res.lit | ||||
| 				line_nr: p.scanner.line_nr | ||||
| 				col: p.scanner.pos - p.scanner.last_nl_pos         | ||||
| 				col: p.scanner.pos - p.scanner.last_nl_pos | ||||
| 		} | ||||
| 		if res.tok == .eof { | ||||
| 				break | ||||
|  | @ -1487,6 +1487,7 @@ fn (p mut Parser) var_decl() { | |||
| 	 | ||||
| 	mut names := []string | ||||
| 	names << p.check_name() | ||||
| 	p.scanner.validate_var_name(names[0]) | ||||
| 	for p.tok == .comma { | ||||
| 		p.check(.comma) | ||||
| 		names << p.check_name() | ||||
|  |  | |||
|  | @ -82,9 +82,9 @@ fn new_scanner(text string) &Scanner { | |||
| 
 | ||||
| 
 | ||||
| // The goal of ScannerPos is to track the current scanning position,
 | ||||
| // so that if there is an error found later, v could show a more accurate 
 | ||||
| // so that if there is an error found later, v could show a more accurate
 | ||||
| // position about where the error initially was.
 | ||||
| // NB: The fields of ScannerPos *should be kept synchronized* with the 
 | ||||
| // NB: The fields of ScannerPos *should be kept synchronized* with the
 | ||||
| // corresponding fields in Scanner.
 | ||||
| struct ScannerPos { | ||||
| mut: | ||||
|  | @ -123,7 +123,7 @@ fn (s mut Scanner) get_scanner_pos_of_token(t Tok) ScannerPos { | |||
| 	s.file_lines = []string | ||||
| 	mut prevlinepos := 0 | ||||
| 	for { | ||||
| 		prevlinepos = s.pos  | ||||
| 		prevlinepos = s.pos | ||||
| 		if s.pos >= s.text.len { break }		 | ||||
| 		if s.line_nr > tline + 10 { break } | ||||
| 		////////////////////////////////////////
 | ||||
|  | @ -287,7 +287,7 @@ fn (s mut Scanner) ident_number() string { | |||
| fn (s mut Scanner) skip_whitespace() { | ||||
| 	for s.pos < s.text.len && s.text[s.pos].is_white() { | ||||
| 		// Count \r\n as one line
 | ||||
| 		if is_nl(s.text[s.pos]) && !s.expect('\r\n', s.pos-1) {   | ||||
| 		if is_nl(s.text[s.pos]) && !s.expect('\r\n', s.pos-1) { | ||||
| 			s.inc_line_number() | ||||
| 		} | ||||
| 		s.pos++ | ||||
|  | @ -899,3 +899,16 @@ fn good_type_name(s string) bool { | |||
| 	} | ||||
| 	return true | ||||
| } | ||||
| 
 | ||||
| // registration_date good
 | ||||
| // registrationdate  bad
 | ||||
| fn (s &Scanner) validate_var_name(name string) { | ||||
| 	if name.len > 11 && !name.contains('_') { | ||||
| 		s.error('bad variable name `$name`\n' + | ||||
| 'looks like you have a multi-word name without separating them with `_`' + | ||||
| '\nfor example, use `registration_date` instead of `registrationdate` ') | ||||
| 		 | ||||
| 	}	 | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
|  | @ -468,9 +468,9 @@ pub fn get_line() string { | |||
| // get_raw_line returns a one-line string from stdin along with '\n' if there is any
 | ||||
| pub fn get_raw_line() string { | ||||
| 	$if windows { | ||||
|         maxlinechars := 256 | ||||
|         buf := &byte(malloc(maxlinechars*2)) | ||||
|         res := int( C.fgetws(buf, maxlinechars, C.stdin ) ) | ||||
|         max_line_chars := 256 | ||||
|         buf := &byte(malloc(max_line_chars*2)) | ||||
|         res := int( C.fgetws(buf, max_line_chars, C.stdin ) ) | ||||
|         len := int(  C.wcslen(&u16(buf)) ) | ||||
|         if 0 != res { return string_from_wide2( &u16(buf), len ) } | ||||
|         return '' | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue