ast: change CompFor to ComptimeFor (#12482)
							parent
							
								
									927df948ae
								
							
						
					
					
						commit
						5a89c0a480
					
				| 
						 | 
				
			
			@ -405,7 +405,7 @@ fn (t Tree) stmt(node ast.Stmt) &Node {
 | 
			
		|||
		ast.EnumDecl { return t.enum_decl(node) }
 | 
			
		||||
		ast.InterfaceDecl { return t.interface_decl(node) }
 | 
			
		||||
		ast.HashStmt { return t.hash_stmt(node) }
 | 
			
		||||
		ast.CompFor { return t.comptime_for(node) }
 | 
			
		||||
		ast.ComptimeFor { return t.comptime_for(node) }
 | 
			
		||||
		ast.GlobalDecl { return t.global_decl(node) }
 | 
			
		||||
		ast.DeferStmt { return t.defer_stmt(node) }
 | 
			
		||||
		ast.TypeDecl { return t.type_decl(node) }
 | 
			
		||||
| 
						 | 
				
			
			@ -700,9 +700,9 @@ fn (t Tree) hash_stmt(node ast.HashStmt) &Node {
 | 
			
		|||
	return obj
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fn (t Tree) comptime_for(node ast.CompFor) &Node {
 | 
			
		||||
fn (t Tree) comptime_for(node ast.ComptimeFor) &Node {
 | 
			
		||||
	mut obj := new_object()
 | 
			
		||||
	obj.add('ast_type', t.string_node('CompFor'))
 | 
			
		||||
	obj.add('ast_type', t.string_node('ComptimeFor'))
 | 
			
		||||
	obj.add('val_var', t.string_node(node.val_var))
 | 
			
		||||
	obj.add('typ', t.type_node(node.typ))
 | 
			
		||||
	obj.add('kind', t.enum_node(node.kind))
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -65,7 +65,7 @@ pub type Stmt = AsmStmt
 | 
			
		|||
	| AssignStmt
 | 
			
		||||
	| Block
 | 
			
		||||
	| BranchStmt
 | 
			
		||||
	| CompFor
 | 
			
		||||
	| ComptimeFor
 | 
			
		||||
	| ConstDecl
 | 
			
		||||
	| DeferStmt
 | 
			
		||||
	| EmptyStmt
 | 
			
		||||
| 
						 | 
				
			
			@ -898,17 +898,17 @@ pub:
 | 
			
		|||
	post_comments []Comment
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pub enum CompForKind {
 | 
			
		||||
pub enum ComptimeForKind {
 | 
			
		||||
	methods
 | 
			
		||||
	fields
 | 
			
		||||
	attributes
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pub struct CompFor {
 | 
			
		||||
pub struct ComptimeFor {
 | 
			
		||||
pub:
 | 
			
		||||
	val_var string
 | 
			
		||||
	stmts   []Stmt
 | 
			
		||||
	kind    CompForKind
 | 
			
		||||
	kind    ComptimeForKind
 | 
			
		||||
	pos     token.Position
 | 
			
		||||
	typ_pos token.Position
 | 
			
		||||
pub mut:
 | 
			
		||||
| 
						 | 
				
			
			@ -1904,7 +1904,7 @@ pub fn (node Node) children() []Node {
 | 
			
		|||
		}
 | 
			
		||||
	} else if node is Stmt {
 | 
			
		||||
		match node {
 | 
			
		||||
			Block, DeferStmt, ForCStmt, ForInStmt, ForStmt, CompFor {
 | 
			
		||||
			Block, DeferStmt, ForCStmt, ForInStmt, ForStmt, ComptimeFor {
 | 
			
		||||
				return node.stmts.map(Node(it))
 | 
			
		||||
			}
 | 
			
		||||
			ExprStmt, AssertStmt {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -580,7 +580,7 @@ fn field_to_string(f ConstField) string {
 | 
			
		|||
	return '$x = $f.expr'
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pub fn (e CompForKind) str() string {
 | 
			
		||||
pub fn (e ComptimeForKind) str() string {
 | 
			
		||||
	match e {
 | 
			
		||||
		.methods { return 'methods' }
 | 
			
		||||
		.fields { return 'fields' }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4606,7 +4606,7 @@ fn (mut c Checker) stmt(node ast.Stmt) {
 | 
			
		|||
		ast.BranchStmt {
 | 
			
		||||
			c.branch_stmt(node)
 | 
			
		||||
		}
 | 
			
		||||
		ast.CompFor {
 | 
			
		||||
		ast.ComptimeFor {
 | 
			
		||||
			c.comptime_for(node)
 | 
			
		||||
		}
 | 
			
		||||
		ast.ConstDecl {
 | 
			
		||||
| 
						 | 
				
			
			@ -4783,7 +4783,7 @@ fn (mut c Checker) for_c_stmt(node ast.ForCStmt) {
 | 
			
		|||
	c.in_for_count--
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fn (mut c Checker) comptime_for(node ast.CompFor) {
 | 
			
		||||
fn (mut c Checker) comptime_for(node ast.ComptimeFor) {
 | 
			
		||||
	typ := c.unwrap_generic(node.typ)
 | 
			
		||||
	sym := c.table.get_type_symbol(typ)
 | 
			
		||||
	if sym.kind == .placeholder || typ.has_flag(.generic) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -430,7 +430,7 @@ pub fn (mut f Fmt) stmt(node ast.Stmt) {
 | 
			
		|||
		ast.BranchStmt {
 | 
			
		||||
			f.branch_stmt(node)
 | 
			
		||||
		}
 | 
			
		||||
		ast.CompFor {
 | 
			
		||||
		ast.ComptimeFor {
 | 
			
		||||
			f.comptime_for(node)
 | 
			
		||||
		}
 | 
			
		||||
		ast.ConstDecl {
 | 
			
		||||
| 
						 | 
				
			
			@ -762,7 +762,7 @@ pub fn (mut f Fmt) branch_stmt(node ast.BranchStmt) {
 | 
			
		|||
	f.writeln(node.str())
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pub fn (mut f Fmt) comptime_for(node ast.CompFor) {
 | 
			
		||||
pub fn (mut f Fmt) comptime_for(node ast.ComptimeFor) {
 | 
			
		||||
	typ := f.no_cur_mod(f.table.type_to_str_using_aliases(node.typ, f.mod2alias))
 | 
			
		||||
	f.write('\$for $node.val_var in ${typ}.$node.kind.str() {')
 | 
			
		||||
	f.mark_types_import_as_used(node.typ)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1568,7 +1568,7 @@ fn (mut g Gen) stmt(node ast.Stmt) {
 | 
			
		|||
			g.const_decl(node)
 | 
			
		||||
			// }
 | 
			
		||||
		}
 | 
			
		||||
		ast.CompFor {
 | 
			
		||||
		ast.ComptimeFor {
 | 
			
		||||
			g.comptime_for(node)
 | 
			
		||||
		}
 | 
			
		||||
		ast.DeferStmt {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -406,7 +406,7 @@ fn (mut g Gen) comptime_if_cond(cond ast.Expr, pkg_exist bool) bool {
 | 
			
		|||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fn (mut g Gen) comptime_for(node ast.CompFor) {
 | 
			
		||||
fn (mut g Gen) comptime_for(node ast.ComptimeFor) {
 | 
			
		||||
	sym := g.table.get_type_symbol(g.unwrap_generic(node.typ))
 | 
			
		||||
	g.writeln('/* \$for $node.val_var in ${sym.name}($node.kind.str()) */ {')
 | 
			
		||||
	g.indent++
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -637,7 +637,7 @@ fn (mut g JsGen) stmt_no_semi(node ast.Stmt) {
 | 
			
		|||
			g.write_v_source_line_info(node.pos)
 | 
			
		||||
			g.gen_branch_stmt(node)
 | 
			
		||||
		}
 | 
			
		||||
		ast.CompFor {}
 | 
			
		||||
		ast.ComptimeFor {}
 | 
			
		||||
		ast.ConstDecl {
 | 
			
		||||
			g.write_v_source_line_info(node.pos)
 | 
			
		||||
			g.gen_const_decl(node)
 | 
			
		||||
| 
						 | 
				
			
			@ -740,7 +740,7 @@ fn (mut g JsGen) stmt(node ast.Stmt) {
 | 
			
		|||
			g.write_v_source_line_info(node.pos)
 | 
			
		||||
			g.gen_branch_stmt(node)
 | 
			
		||||
		}
 | 
			
		||||
		ast.CompFor {}
 | 
			
		||||
		ast.ComptimeFor {}
 | 
			
		||||
		ast.ConstDecl {
 | 
			
		||||
			g.write_v_source_line_info(node.pos)
 | 
			
		||||
			g.gen_const_decl(node)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -92,7 +92,7 @@ pub fn (mut w Walker) stmt(node ast.Stmt) {
 | 
			
		|||
		ast.Block {
 | 
			
		||||
			w.stmts(node.stmts)
 | 
			
		||||
		}
 | 
			
		||||
		ast.CompFor {
 | 
			
		||||
		ast.ComptimeFor {
 | 
			
		||||
			w.stmts(node.stmts)
 | 
			
		||||
		}
 | 
			
		||||
		ast.ConstDecl {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -232,7 +232,7 @@ fn (mut p Parser) comptime_call() ast.ComptimeCall {
 | 
			
		|||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fn (mut p Parser) comptime_for() ast.CompFor {
 | 
			
		||||
fn (mut p Parser) comptime_for() ast.ComptimeFor {
 | 
			
		||||
	// p.comptime_for() handles these special forms:
 | 
			
		||||
	// $for method in App(methods) {
 | 
			
		||||
	// $for field in App(fields) {
 | 
			
		||||
| 
						 | 
				
			
			@ -247,7 +247,7 @@ fn (mut p Parser) comptime_for() ast.CompFor {
 | 
			
		|||
	typ_pos = typ_pos.extend(p.prev_tok.position())
 | 
			
		||||
	p.check(.dot)
 | 
			
		||||
	for_val := p.check_name()
 | 
			
		||||
	mut kind := ast.CompForKind.methods
 | 
			
		||||
	mut kind := ast.ComptimeForKind.methods
 | 
			
		||||
	p.open_scope()
 | 
			
		||||
	if for_val == 'methods' {
 | 
			
		||||
		p.scope.register(ast.Var{
 | 
			
		||||
| 
						 | 
				
			
			@ -272,12 +272,12 @@ fn (mut p Parser) comptime_for() ast.CompFor {
 | 
			
		|||
	} else {
 | 
			
		||||
		p.error_with_pos('unknown kind `$for_val`, available are: `methods`, `fields` or `attributes`',
 | 
			
		||||
			p.prev_tok.position())
 | 
			
		||||
		return ast.CompFor{}
 | 
			
		||||
		return ast.ComptimeFor{}
 | 
			
		||||
	}
 | 
			
		||||
	spos := p.tok.position()
 | 
			
		||||
	stmts := p.parse_block()
 | 
			
		||||
	p.close_scope()
 | 
			
		||||
	return ast.CompFor{
 | 
			
		||||
	return ast.ComptimeFor{
 | 
			
		||||
		val_var: val_var
 | 
			
		||||
		stmts: stmts
 | 
			
		||||
		kind: kind
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -43,7 +43,7 @@ pub fn (t Transformer) stmt(mut node ast.Stmt) {
 | 
			
		|||
			}
 | 
			
		||||
		}
 | 
			
		||||
		ast.BranchStmt {}
 | 
			
		||||
		ast.CompFor {}
 | 
			
		||||
		ast.ComptimeFor {}
 | 
			
		||||
		ast.ConstDecl {
 | 
			
		||||
			for mut field in node.fields {
 | 
			
		||||
				expr := t.expr(field.expr)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue