vweb: fix duplicate fn error with multiple templates
							parent
							
								
									1396dc1c89
								
							
						
					
					
						commit
						b3e416fb52
					
				| 
						 | 
					@ -0,0 +1,16 @@
 | 
				
			||||||
 | 
					module strings
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//import rand
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// random returns a random string with `n` characters
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					// TODO
 | 
				
			||||||
 | 
					pub fn random(n int) string {
 | 
				
			||||||
 | 
						buf := vmalloc(n)
 | 
				
			||||||
 | 
						for i in 0..n {
 | 
				
			||||||
 | 
							buf[i] = rand.next()
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return tos(buf)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -12,7 +12,7 @@ fn (g &Gen) comptime_call(node ast.ComptimeCall) {
 | 
				
			||||||
			if stmt is ast.FnDecl {
 | 
								if stmt is ast.FnDecl {
 | 
				
			||||||
				fn_decl := stmt as ast.FnDecl
 | 
									fn_decl := stmt as ast.FnDecl
 | 
				
			||||||
				// insert stmts from vweb_tmpl fn
 | 
									// insert stmts from vweb_tmpl fn
 | 
				
			||||||
				if fn_decl.name == 'vweb_tmpl' {
 | 
									if fn_decl.name.starts_with('vweb_tmpl') {
 | 
				
			||||||
					g.stmts(fn_decl.stmts)
 | 
										g.stmts(fn_decl.stmts)
 | 
				
			||||||
					break
 | 
										break
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -100,7 +100,7 @@ fn (mut p Parser) vweb() ast.ComptimeCall {
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		// println('path is now "$path"')
 | 
							// println('path is now "$path"')
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	v_code := tmpl.compile_file(path)
 | 
						v_code := tmpl.compile_file(path, p.cur_fn_name)
 | 
				
			||||||
	mut scope := &ast.Scope{
 | 
						mut scope := &ast.Scope{
 | 
				
			||||||
		start_pos: 0
 | 
							start_pos: 0
 | 
				
			||||||
		parent: p.global_scope
 | 
							parent: p.global_scope
 | 
				
			||||||
| 
						 | 
					@ -117,7 +117,7 @@ fn (mut p Parser) vweb() ast.ComptimeCall {
 | 
				
			||||||
	for stmt in file.stmts {
 | 
						for stmt in file.stmts {
 | 
				
			||||||
		if stmt is ast.FnDecl {
 | 
							if stmt is ast.FnDecl {
 | 
				
			||||||
			fn_decl := stmt as ast.FnDecl
 | 
								fn_decl := stmt as ast.FnDecl
 | 
				
			||||||
			if fn_decl.name == 'vweb_tmpl' {
 | 
								if fn_decl.name.starts_with('vweb_tmpl') {
 | 
				
			||||||
				body_scope := file.scope.innermost(fn_decl.body_pos.pos)
 | 
									body_scope := file.scope.innermost(fn_decl.body_pos.pos)
 | 
				
			||||||
				for _, obj in p.scope.objects {
 | 
									for _, obj in p.scope.objects {
 | 
				
			||||||
					if obj is ast.Var {
 | 
										if obj is ast.Var {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -12,14 +12,14 @@ const (
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// compile_file compiles the content of a file by the given path as a template
 | 
					// compile_file compiles the content of a file by the given path as a template
 | 
				
			||||||
pub fn compile_file(path string) string {
 | 
					pub fn compile_file(path, fn_name string) string {
 | 
				
			||||||
	mut html := os.read_file(path) or {
 | 
						mut html := os.read_file(path) or {
 | 
				
			||||||
		panic('html failed')
 | 
							panic('html failed')
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return compile_template(html)
 | 
						return compile_template(html, fn_name)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub fn compile_template(content string) string {
 | 
					pub fn compile_template(content, fn_name string) string {
 | 
				
			||||||
	// lines := os.read_lines(path)
 | 
						// lines := os.read_lines(path)
 | 
				
			||||||
	mut html := content
 | 
						mut html := content
 | 
				
			||||||
	mut header := ''
 | 
						mut header := ''
 | 
				
			||||||
| 
						 | 
					@ -36,7 +36,7 @@ pub fn compile_template(content string) string {
 | 
				
			||||||
	s.writeln("
 | 
						s.writeln("
 | 
				
			||||||
	import strings
 | 
						import strings
 | 
				
			||||||
	// === vweb html template ===
 | 
						// === vweb html template ===
 | 
				
			||||||
	fn vweb_tmpl() {
 | 
						fn vweb_tmpl_${fn_name}() {
 | 
				
			||||||
	mut sb := strings.new_builder(${lines.len * 30})
 | 
						mut sb := strings.new_builder(${lines.len * 30})
 | 
				
			||||||
	header := \' \' // TODO remove
 | 
						header := \' \' // TODO remove
 | 
				
			||||||
	_ = header
 | 
						_ = header
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue