Skip to content

Commit 26714fa

Browse files
authored
ast, checker, cgen: improve sorting globals and consts (#14769)
1 parent 9c72b85 commit 26714fa

File tree

3 files changed

+47
-22
lines changed

3 files changed

+47
-22
lines changed

vlib/v/ast/table.v

Lines changed: 45 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2146,31 +2146,11 @@ pub fn (t &Table) is_comptime_type(x Type, y ComptimeType) bool {
21462146
pub fn (t &Table) dependent_names_in_expr(expr Expr) []string {
21472147
mut names := []string{}
21482148
match expr {
2149-
Ident {
2150-
if expr.kind in [.global, .constant] {
2151-
names << util.no_dots(expr.name)
2152-
}
2153-
}
21542149
ArrayInit {
21552150
for elem_expr in expr.exprs {
21562151
names << t.dependent_names_in_expr(elem_expr)
21572152
}
21582153
}
2159-
StructInit {
2160-
for field in expr.fields {
2161-
names << t.dependent_names_in_expr(field.expr)
2162-
}
2163-
}
2164-
InfixExpr {
2165-
names << t.dependent_names_in_expr(expr.left)
2166-
names << t.dependent_names_in_expr(expr.right)
2167-
}
2168-
PostfixExpr {
2169-
names << t.dependent_names_in_expr(expr.expr)
2170-
}
2171-
PrefixExpr {
2172-
names << t.dependent_names_in_expr(expr.right)
2173-
}
21742154
CallExpr {
21752155
for arg in expr.args {
21762156
names << t.dependent_names_in_expr(arg.expr)
@@ -2179,6 +2159,15 @@ pub fn (t &Table) dependent_names_in_expr(expr Expr) []string {
21792159
names << func.dep_names
21802160
}
21812161
}
2162+
CastExpr {
2163+
names << t.dependent_names_in_expr(expr.expr)
2164+
names << t.dependent_names_in_expr(expr.arg)
2165+
}
2166+
Ident {
2167+
if expr.kind in [.global, .constant] {
2168+
names << util.no_dots(expr.name)
2169+
}
2170+
}
21822171
IfExpr {
21832172
for branch in expr.branches {
21842173
names << t.dependent_names_in_expr(branch.cond)
@@ -2187,6 +2176,15 @@ pub fn (t &Table) dependent_names_in_expr(expr Expr) []string {
21872176
}
21882177
}
21892178
}
2179+
InfixExpr {
2180+
names << t.dependent_names_in_expr(expr.left)
2181+
names << t.dependent_names_in_expr(expr.right)
2182+
}
2183+
MapInit {
2184+
for val in expr.vals {
2185+
names << t.dependent_names_in_expr(val)
2186+
}
2187+
}
21902188
MatchExpr {
21912189
names << t.dependent_names_in_expr(expr.cond)
21922190
for branch in expr.branches {
@@ -2195,6 +2193,20 @@ pub fn (t &Table) dependent_names_in_expr(expr Expr) []string {
21952193
}
21962194
}
21972195
}
2196+
ParExpr {
2197+
names << t.dependent_names_in_expr(expr.expr)
2198+
}
2199+
PostfixExpr {
2200+
names << t.dependent_names_in_expr(expr.expr)
2201+
}
2202+
PrefixExpr {
2203+
names << t.dependent_names_in_expr(expr.right)
2204+
}
2205+
StructInit {
2206+
for field in expr.fields {
2207+
names << t.dependent_names_in_expr(field.expr)
2208+
}
2209+
}
21982210
else {}
21992211
}
22002212
return names
@@ -2220,6 +2232,19 @@ pub fn (t &Table) dependent_names_in_stmt(stmt Stmt) []string {
22202232
names << t.dependent_names_in_stmt(stmt_)
22212233
}
22222234
}
2235+
ForStmt {
2236+
for stmt_ in stmt.stmts {
2237+
names << t.dependent_names_in_stmt(stmt_)
2238+
}
2239+
}
2240+
ForCStmt {
2241+
names << t.dependent_names_in_stmt(stmt.init)
2242+
names << t.dependent_names_in_expr(stmt.cond)
2243+
names << t.dependent_names_in_stmt(stmt.inc)
2244+
for stmt_ in stmt.stmts {
2245+
names << t.dependent_names_in_stmt(stmt_)
2246+
}
2247+
}
22232248
Return {
22242249
for expr in stmt.exprs {
22252250
names << t.dependent_names_in_expr(expr)

vlib/v/checker/fn.v

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -335,7 +335,7 @@ fn (mut c Checker) fn_decl(mut node ast.FnDecl) {
335335
}
336336
node.source_file = c.file
337337

338-
if c.table.known_fn(node.name) {
338+
if c.table.known_fn(node.name) && node.name != 'main.main' {
339339
mut dep_names := []string{}
340340
for stmt in node.stmts {
341341
dep_names << c.table.dependent_names_in_stmt(stmt)

vlib/v/gen/c/cgen.v

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4595,7 +4595,7 @@ fn (mut g Gen) const_decl_init_later(mod string, name string, expr ast.Expr, typ
45954595
g.global_const_defs[util.no_dots(name)] = GlobalConstDef{
45964596
mod: mod
45974597
def: '$styp $cname; // inited later'
4598-
init: init.str()
4598+
init: init.str().trim_right('\n')
45994599
dep_names: g.table.dependent_names_in_expr(expr)
46004600
}
46014601
if g.is_autofree {

0 commit comments

Comments
 (0)