jsgen: add hash statement
							parent
							
								
									2943bdc1f6
								
							
						
					
					
						commit
						1d0ebfb691
					
				|  | @ -446,7 +446,7 @@ fn (mut g JsGen) stmt(node ast.Stmt) { | |||
| 			// skip: JS has no goto
 | ||||
| 		} | ||||
| 		ast.HashStmt { | ||||
| 			// skip: nothing with # in JS
 | ||||
| 			g.gen_hash_stmt(it) | ||||
| 		} | ||||
| 		ast.Import { | ||||
| 			g.gen_import_stmt(it) | ||||
|  | @ -1010,6 +1010,10 @@ fn (mut g JsGen) gen_return_stmt(it ast.Return) { | |||
| 	g.writeln(';') | ||||
| } | ||||
| 
 | ||||
| fn (mut g JsGen) gen_hash_stmt(it ast.HashStmt) { | ||||
| 	g.writeln(it.val) | ||||
| } | ||||
| 
 | ||||
| fn (mut g JsGen) gen_struct_decl(node ast.StructDecl) { | ||||
| 	g.writeln(g.doc.gen_fac_fn(node.fields)) | ||||
| 	g.write('function ${g.js_name(node.name)}({ ') | ||||
|  |  | |||
|  | @ -0,0 +1,5 @@ | |||
| module hello | ||||
| 
 | ||||
| pub fn raw_js_log() { | ||||
| 	#console.log('hello') | ||||
| } | ||||
|  | @ -1,5 +1,5 @@ | |||
| // V_COMMIT_HASH 0de70e8
 | ||||
| // V_CURRENT_COMMIT_HASH 4271eb4
 | ||||
| // V_COMMIT_HASH 5423a15
 | ||||
| // V_CURRENT_COMMIT_HASH 941404d
 | ||||
| // Generated by the V compiler
 | ||||
| 
 | ||||
| "use strict"; | ||||
|  | @ -40,14 +40,22 @@ const builtin = (function () { | |||
| 
 | ||||
| /** @namespace hello */ | ||||
| const hello = (function () { | ||||
| 	/** | ||||
| 	 * @returns {void} | ||||
| 	 * @function | ||||
| 	*/ | ||||
| 	function raw_js_log() { | ||||
| 		console.log('hello') | ||||
| 	} | ||||
| 	 | ||||
| 	/** | ||||
| 	 * @param {{foo?: string}} values - values for this class fields | ||||
| 	 * @constructor | ||||
| 	*/ | ||||
| 	function A({ foo = "" }) { | ||||
| 	function Aaa({ foo = "" }) { | ||||
| 		this.foo = foo | ||||
| 	}; | ||||
| 	A.prototype = { | ||||
| 	Aaa.prototype = { | ||||
| 		/** @type {string} - foo */ | ||||
| 		foo: "", | ||||
| 		/** | ||||
|  | @ -66,12 +74,12 @@ const hello = (function () { | |||
| 	 * @param {{}} values - values for this class fields | ||||
| 	 * @constructor | ||||
| 	*/ | ||||
| 	function B({  }) { | ||||
| 	function Bbb({  }) { | ||||
| 	}; | ||||
| 	B.prototype = { | ||||
| 	Bbb.prototype = { | ||||
| 	}; | ||||
| 
 | ||||
| 	const C = Object.freeze({ | ||||
| 	const Ccc = Object.freeze({ | ||||
| 	}); | ||||
| 	 | ||||
| 	/** | ||||
|  | @ -79,7 +87,7 @@ const hello = (function () { | |||
| 	 * @function | ||||
| 	*/ | ||||
| 	function v_debugger() { | ||||
| 		const v = new B({}); | ||||
| 		const v = new Bbb({}); | ||||
| 		return "Hello"; | ||||
| 	} | ||||
| 	 | ||||
|  | @ -93,8 +101,9 @@ const hello = (function () { | |||
| 
 | ||||
| 	/* module exports */ | ||||
| 	return { | ||||
| 		A, | ||||
| 		C, | ||||
| 		raw_js_log, | ||||
| 		Aaa, | ||||
| 		Ccc, | ||||
| 		v_debugger, | ||||
| 		excited, | ||||
| 	}; | ||||
|  | @ -103,14 +112,14 @@ const hello = (function () { | |||
| /** @namespace main */ | ||||
| const main = (function (hl) { | ||||
| 	/** | ||||
| 	 * @param {{a?: hl["A"]["prototype"]}} values - values for this class fields | ||||
| 	 * @param {{a?: hl["Aaa"]["prototype"]}} values - values for this class fields | ||||
| 	 * @constructor | ||||
| 	*/ | ||||
| 	function Foo({ a = {} }) { | ||||
| 		this.a = a | ||||
| 	}; | ||||
| 	Foo.prototype = { | ||||
| 		/** @type {hl["A"]["prototype"]} - a */ | ||||
| 		/** @type {hl["Aaa"]["prototype"]} - a */ | ||||
| 		a: {} | ||||
| 	}; | ||||
| 
 | ||||
|  | @ -176,11 +185,11 @@ const main = (function (hl) { | |||
| 		a *= 2; | ||||
| 		a += 3; | ||||
| 		builtin.println(a); | ||||
| 		const b = new hl.A({}); | ||||
| 		const b = new hl.Aaa({}); | ||||
| 		b.update("an update"); | ||||
| 		builtin.println(b); | ||||
| 		const c = new Foo({ | ||||
| 			a: new hl.A({}) | ||||
| 			a: new hl.Aaa({}) | ||||
| 		}); | ||||
| 		c.a.update("another update"); | ||||
| 		builtin.println(c); | ||||
|  | @ -241,6 +250,7 @@ const main = (function (hl) { | |||
| 		anon_consumer(hl.excited(), function (message) { | ||||
| 			builtin.println(message); | ||||
| 		}); | ||||
| 		hl.raw_js_log(); | ||||
| 	})(); | ||||
| 	 | ||||
| 	/** | ||||
|  |  | |||
|  | @ -8,7 +8,7 @@ const ( | |||
| ) | ||||
| 
 | ||||
| struct Foo { | ||||
|     a hl.A | ||||
|     a hl.Aaa | ||||
| } | ||||
| 
 | ||||
| struct Companies { | ||||
|  | @ -35,11 +35,11 @@ fn main() { | |||
|     a += 3 | ||||
|     println(a) // TODO: Handle string interpolation
 | ||||
| 
 | ||||
|     b := hl.A{} | ||||
|     b := hl.Aaa{} | ||||
|     b.update('an update') | ||||
|     println(b) | ||||
| 
 | ||||
|     c := Foo{ hl.A{} } | ||||
|     c := Foo{ hl.Aaa{} } | ||||
|     c.a.update('another update') | ||||
|     println(c) | ||||
| 
 | ||||
|  | @ -87,6 +87,8 @@ fn main() { | |||
|     anon_consumer(hl.excited(), fn (message string) { | ||||
|         println(message) | ||||
|     }) | ||||
| 
 | ||||
|     hl.raw_js_log() | ||||
| } | ||||
| 
 | ||||
| fn anon_consumer (greeting string, anon fn(message string)) { | ||||
|  |  | |||
|  | @ -17,6 +17,14 @@ const ( | |||
| fn (mut p Parser) hash() ast.HashStmt { | ||||
| 	val := p.tok.lit | ||||
| 	p.next() | ||||
| 	if p.pref.backend == .js { | ||||
| 		if !p.file_name.ends_with('.js.v') { | ||||
| 			p.error('Hash statements are only allowed in backend specific files such "x.js.v"') | ||||
| 		} | ||||
| 		if p.mod == 'main' { | ||||
| 			p.error('Hash statements are not allowed in the main module. Please place them in a separate module.') | ||||
| 		} | ||||
| 	} | ||||
| 	if val.starts_with('flag') { | ||||
| 		// #flag linux -lm
 | ||||
| 		mut flag := val[5..] | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue