mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
fmt builder.v
This commit is contained in:
parent
af224b4933
commit
8760313ce5
@ -1,21 +1,19 @@
|
|||||||
module builder
|
module builder
|
||||||
|
|
||||||
import (
|
import os
|
||||||
os
|
import time
|
||||||
time
|
import v.ast
|
||||||
v.ast
|
import v.table
|
||||||
v.table
|
import v.pref
|
||||||
v.pref
|
import v.util
|
||||||
v.util
|
import v.vmod
|
||||||
v.vmod
|
import v.checker
|
||||||
v.checker
|
import v.parser
|
||||||
v.parser
|
import v.scanner
|
||||||
v.scanner
|
import v.gen
|
||||||
v.gen
|
import v.gen.js
|
||||||
v.gen.js
|
import v.gen.x64
|
||||||
v.gen.x64
|
import v.depgraph
|
||||||
v.depgraph
|
|
||||||
)
|
|
||||||
|
|
||||||
pub struct Builder {
|
pub struct Builder {
|
||||||
pub:
|
pub:
|
||||||
@ -36,7 +34,7 @@ pub fn new_builder(pref &pref.Preferences) Builder {
|
|||||||
rdir := os.real_path(pref.path)
|
rdir := os.real_path(pref.path)
|
||||||
compiled_dir := if os.is_dir(rdir) { rdir } else { os.dir(rdir) }
|
compiled_dir := if os.is_dir(rdir) { rdir } else { os.dir(rdir) }
|
||||||
table := table.new_table()
|
table := table.new_table()
|
||||||
return builder.Builder{
|
return Builder{
|
||||||
pref: pref
|
pref: pref
|
||||||
table: table
|
table: table
|
||||||
checker: checker.new_checker(table, pref)
|
checker: checker.new_checker(table, pref)
|
||||||
@ -49,10 +47,10 @@ pub fn new_builder(pref &pref.Preferences) Builder {
|
|||||||
|
|
||||||
// parse all deps from already parsed files
|
// parse all deps from already parsed files
|
||||||
pub fn (b mut Builder) parse_imports() {
|
pub fn (b mut Builder) parse_imports() {
|
||||||
mut done_imports := []string
|
var done_imports := []string
|
||||||
// NB: b.parsed_files is appended in the loop,
|
// NB: b.parsed_files is appended in the loop,
|
||||||
// so we can not use the shorter `for in` form.
|
// so we can not use the shorter `for in` form.
|
||||||
for i := 0; i<b.parsed_files.len; i++ {
|
for i := 0; i < b.parsed_files.len; i++ {
|
||||||
ast_file := b.parsed_files[i]
|
ast_file := b.parsed_files[i]
|
||||||
for _, imp in ast_file.imports {
|
for _, imp in ast_file.imports {
|
||||||
mod := imp.mod
|
mod := imp.mod
|
||||||
@ -86,12 +84,11 @@ pub fn (b mut Builder) parse_imports() {
|
|||||||
b.resolve_deps()
|
b.resolve_deps()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
pub fn (b mut Builder) resolve_deps() {
|
pub fn (b mut Builder) resolve_deps() {
|
||||||
graph := b.import_graph()
|
graph := b.import_graph()
|
||||||
deps_resolved := graph.resolve()
|
deps_resolved := graph.resolve()
|
||||||
if !deps_resolved.acyclic {
|
if !deps_resolved.acyclic {
|
||||||
eprintln('import cycle detected between the following modules: \n' + deps_resolved.display_cycles())
|
eprintln('warning: import cycle detected between the following modules: \n' + deps_resolved.display_cycles())
|
||||||
// TODO: error, when v itself does not have v.table -> v.ast -> v.table cycles anymore
|
// TODO: error, when v itself does not have v.table -> v.ast -> v.table cycles anymore
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -100,7 +97,7 @@ pub fn (b mut Builder) resolve_deps() {
|
|||||||
eprintln(deps_resolved.display())
|
eprintln(deps_resolved.display())
|
||||||
eprintln('------------------------------------------')
|
eprintln('------------------------------------------')
|
||||||
}
|
}
|
||||||
mut mods := []string
|
var mods := []string
|
||||||
for node in deps_resolved.nodes {
|
for node in deps_resolved.nodes {
|
||||||
mods << node.name
|
mods << node.name
|
||||||
}
|
}
|
||||||
@ -109,12 +106,12 @@ pub fn (b mut Builder) resolve_deps() {
|
|||||||
eprintln(mods.str())
|
eprintln(mods.str())
|
||||||
eprintln('-------------------------------')
|
eprintln('-------------------------------')
|
||||||
}
|
}
|
||||||
mut reordered_parsed_files := []ast.File
|
var reordered_parsed_files := []ast.File
|
||||||
for m in mods {
|
for m in mods {
|
||||||
for pf in b.parsed_files {
|
for pf in b.parsed_files {
|
||||||
if m == pf.mod.name {
|
if m == pf.mod.name {
|
||||||
reordered_parsed_files << pf
|
reordered_parsed_files << pf
|
||||||
//eprintln('pf.mod.name: $pf.mod.name | pf.path: $pf.path')
|
// eprintln('pf.mod.name: $pf.mod.name | pf.path: $pf.path')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -123,11 +120,11 @@ pub fn (b mut Builder) resolve_deps() {
|
|||||||
|
|
||||||
// graph of all imported modules
|
// graph of all imported modules
|
||||||
pub fn (b &Builder) import_graph() &depgraph.DepGraph {
|
pub fn (b &Builder) import_graph() &depgraph.DepGraph {
|
||||||
mut builtins := util.builtin_module_parts
|
var builtins := util.builtin_module_parts
|
||||||
builtins << 'builtin'
|
builtins << 'builtin'
|
||||||
mut graph := depgraph.new_dep_graph()
|
var graph := depgraph.new_dep_graph()
|
||||||
for p in b.parsed_files {
|
for p in b.parsed_files {
|
||||||
mut deps := []string
|
var deps := []string
|
||||||
if p.mod.name !in builtins {
|
if p.mod.name !in builtins {
|
||||||
deps << 'builtin'
|
deps << 'builtin'
|
||||||
}
|
}
|
||||||
@ -140,7 +137,7 @@ pub fn (b &Builder) import_graph() &depgraph.DepGraph {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn (b Builder) v_files_from_dir(dir string) []string {
|
pub fn (b Builder) v_files_from_dir(dir string) []string {
|
||||||
mut res := []string
|
var res := []string
|
||||||
if !os.exists(dir) {
|
if !os.exists(dir) {
|
||||||
if dir == 'compiler' && os.is_dir('vlib') {
|
if dir == 'compiler' && os.is_dir('vlib') {
|
||||||
println('looks like you are trying to build V with an old command')
|
println('looks like you are trying to build V with an old command')
|
||||||
@ -150,7 +147,7 @@ pub fn (b Builder) v_files_from_dir(dir string) []string {
|
|||||||
} else if !os.is_dir(dir) {
|
} else if !os.is_dir(dir) {
|
||||||
verror("$dir isn't a directory!")
|
verror("$dir isn't a directory!")
|
||||||
}
|
}
|
||||||
mut files := os.ls(dir) or {
|
var files := os.ls(dir) or {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
if b.pref.is_verbose {
|
if b.pref.is_verbose {
|
||||||
@ -171,7 +168,7 @@ pub fn (b Builder) v_files_from_dir(dir string) []string {
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if b.pref.compile_defines_all.len > 0 && file.contains('_d_') {
|
if b.pref.compile_defines_all.len > 0 && file.contains('_d_') {
|
||||||
mut allowed := false
|
var allowed := false
|
||||||
for cdefine in b.pref.compile_defines {
|
for cdefine in b.pref.compile_defines {
|
||||||
file_postfix := '_d_${cdefine}.v'
|
file_postfix := '_d_${cdefine}.v'
|
||||||
if file.ends_with(file_postfix) {
|
if file.ends_with(file_postfix) {
|
||||||
@ -245,11 +242,11 @@ fn module_path(mod string) string {
|
|||||||
return mod.replace('.', os.path_separator)
|
return mod.replace('.', os.path_separator)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn (b Builder) find_module_path(mod string, fpath string) ?string {
|
pub fn (b Builder) find_module_path(mod, fpath string) ?string {
|
||||||
// support @VROOT/v.mod relative paths:
|
// support @VROOT/v.mod relative paths:
|
||||||
vmod_file_location := vmod.mod_file_cacher.get( fpath )
|
vmod_file_location := vmod.mod_file_cacher.get(fpath)
|
||||||
mod_path := module_path(mod)
|
mod_path := module_path(mod)
|
||||||
mut module_lookup_paths := []string
|
var module_lookup_paths := []string
|
||||||
if vmod_file_location.vmod_file.len != 0 && !(vmod_file_location.vmod_folder in b.module_search_paths) {
|
if vmod_file_location.vmod_file.len != 0 && !(vmod_file_location.vmod_folder in b.module_search_paths) {
|
||||||
module_lookup_paths << vmod_file_location.vmod_folder
|
module_lookup_paths << vmod_file_location.vmod_folder
|
||||||
}
|
}
|
||||||
|
@ -618,6 +618,7 @@ fn (p mut Parser) struct_init(short_syntax bool) ast.StructInit {
|
|||||||
pub fn (p mut Parser) name_expr() ast.Expr {
|
pub fn (p mut Parser) name_expr() ast.Expr {
|
||||||
var node := ast.Expr{}
|
var node := ast.Expr{}
|
||||||
if p.inside_is {
|
if p.inside_is {
|
||||||
|
p.inside_is = false
|
||||||
return ast.Type{
|
return ast.Type{
|
||||||
typ: p.parse_type()
|
typ: p.parse_type()
|
||||||
}
|
}
|
||||||
@ -1054,7 +1055,6 @@ fn (p mut Parser) infix_expr(left ast.Expr) ast.Expr {
|
|||||||
p.inside_is = true
|
p.inside_is = true
|
||||||
}
|
}
|
||||||
right = p.expr(precedence)
|
right = p.expr(precedence)
|
||||||
p.inside_is = false
|
|
||||||
var expr := ast.Expr{}
|
var expr := ast.Expr{}
|
||||||
expr = ast.InfixExpr{
|
expr = ast.InfixExpr{
|
||||||
left: left
|
left: left
|
||||||
|
Loading…
Reference in New Issue
Block a user