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
|
// skip: JS has no goto
|
||||||
}
|
}
|
||||||
ast.HashStmt {
|
ast.HashStmt {
|
||||||
// skip: nothing with # in JS
|
g.gen_hash_stmt(it)
|
||||||
}
|
}
|
||||||
ast.Import {
|
ast.Import {
|
||||||
g.gen_import_stmt(it)
|
g.gen_import_stmt(it)
|
||||||
|
@ -1010,6 +1010,10 @@ fn (mut g JsGen) gen_return_stmt(it ast.Return) {
|
||||||
g.writeln(';')
|
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) {
|
fn (mut g JsGen) gen_struct_decl(node ast.StructDecl) {
|
||||||
g.writeln(g.doc.gen_fac_fn(node.fields))
|
g.writeln(g.doc.gen_fac_fn(node.fields))
|
||||||
g.write('function ${g.js_name(node.name)}({ ')
|
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_COMMIT_HASH 5423a15
|
||||||
// V_CURRENT_COMMIT_HASH 4271eb4
|
// V_CURRENT_COMMIT_HASH 941404d
|
||||||
// Generated by the V compiler
|
// Generated by the V compiler
|
||||||
|
|
||||||
"use strict";
|
"use strict";
|
||||||
|
@ -40,14 +40,22 @@ const builtin = (function () {
|
||||||
|
|
||||||
/** @namespace hello */
|
/** @namespace hello */
|
||||||
const hello = (function () {
|
const hello = (function () {
|
||||||
|
/**
|
||||||
|
* @returns {void}
|
||||||
|
* @function
|
||||||
|
*/
|
||||||
|
function raw_js_log() {
|
||||||
|
console.log('hello')
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {{foo?: string}} values - values for this class fields
|
* @param {{foo?: string}} values - values for this class fields
|
||||||
* @constructor
|
* @constructor
|
||||||
*/
|
*/
|
||||||
function A({ foo = "" }) {
|
function Aaa({ foo = "" }) {
|
||||||
this.foo = foo
|
this.foo = foo
|
||||||
};
|
};
|
||||||
A.prototype = {
|
Aaa.prototype = {
|
||||||
/** @type {string} - foo */
|
/** @type {string} - foo */
|
||||||
foo: "",
|
foo: "",
|
||||||
/**
|
/**
|
||||||
|
@ -66,12 +74,12 @@ const hello = (function () {
|
||||||
* @param {{}} values - values for this class fields
|
* @param {{}} values - values for this class fields
|
||||||
* @constructor
|
* @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
|
||||||
*/
|
*/
|
||||||
function v_debugger() {
|
function v_debugger() {
|
||||||
const v = new B({});
|
const v = new Bbb({});
|
||||||
return "Hello";
|
return "Hello";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -93,8 +101,9 @@ const hello = (function () {
|
||||||
|
|
||||||
/* module exports */
|
/* module exports */
|
||||||
return {
|
return {
|
||||||
A,
|
raw_js_log,
|
||||||
C,
|
Aaa,
|
||||||
|
Ccc,
|
||||||
v_debugger,
|
v_debugger,
|
||||||
excited,
|
excited,
|
||||||
};
|
};
|
||||||
|
@ -103,14 +112,14 @@ const hello = (function () {
|
||||||
/** @namespace main */
|
/** @namespace main */
|
||||||
const main = (function (hl) {
|
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
|
* @constructor
|
||||||
*/
|
*/
|
||||||
function Foo({ a = {} }) {
|
function Foo({ a = {} }) {
|
||||||
this.a = a
|
this.a = a
|
||||||
};
|
};
|
||||||
Foo.prototype = {
|
Foo.prototype = {
|
||||||
/** @type {hl["A"]["prototype"]} - a */
|
/** @type {hl["Aaa"]["prototype"]} - a */
|
||||||
a: {}
|
a: {}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -176,11 +185,11 @@ const main = (function (hl) {
|
||||||
a *= 2;
|
a *= 2;
|
||||||
a += 3;
|
a += 3;
|
||||||
builtin.println(a);
|
builtin.println(a);
|
||||||
const b = new hl.A({});
|
const b = new hl.Aaa({});
|
||||||
b.update("an update");
|
b.update("an update");
|
||||||
builtin.println(b);
|
builtin.println(b);
|
||||||
const c = new Foo({
|
const c = new Foo({
|
||||||
a: new hl.A({})
|
a: new hl.Aaa({})
|
||||||
});
|
});
|
||||||
c.a.update("another update");
|
c.a.update("another update");
|
||||||
builtin.println(c);
|
builtin.println(c);
|
||||||
|
@ -241,6 +250,7 @@ const main = (function (hl) {
|
||||||
anon_consumer(hl.excited(), function (message) {
|
anon_consumer(hl.excited(), function (message) {
|
||||||
builtin.println(message);
|
builtin.println(message);
|
||||||
});
|
});
|
||||||
|
hl.raw_js_log();
|
||||||
})();
|
})();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -8,7 +8,7 @@ const (
|
||||||
)
|
)
|
||||||
|
|
||||||
struct Foo {
|
struct Foo {
|
||||||
a hl.A
|
a hl.Aaa
|
||||||
}
|
}
|
||||||
|
|
||||||
struct Companies {
|
struct Companies {
|
||||||
|
@ -35,11 +35,11 @@ fn main() {
|
||||||
a += 3
|
a += 3
|
||||||
println(a) // TODO: Handle string interpolation
|
println(a) // TODO: Handle string interpolation
|
||||||
|
|
||||||
b := hl.A{}
|
b := hl.Aaa{}
|
||||||
b.update('an update')
|
b.update('an update')
|
||||||
println(b)
|
println(b)
|
||||||
|
|
||||||
c := Foo{ hl.A{} }
|
c := Foo{ hl.Aaa{} }
|
||||||
c.a.update('another update')
|
c.a.update('another update')
|
||||||
println(c)
|
println(c)
|
||||||
|
|
||||||
|
@ -87,6 +87,8 @@ fn main() {
|
||||||
anon_consumer(hl.excited(), fn (message string) {
|
anon_consumer(hl.excited(), fn (message string) {
|
||||||
println(message)
|
println(message)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
hl.raw_js_log()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn anon_consumer (greeting string, anon fn(message string)) {
|
fn anon_consumer (greeting string, anon fn(message string)) {
|
||||||
|
|
|
@ -17,6 +17,14 @@ const (
|
||||||
fn (mut p Parser) hash() ast.HashStmt {
|
fn (mut p Parser) hash() ast.HashStmt {
|
||||||
val := p.tok.lit
|
val := p.tok.lit
|
||||||
p.next()
|
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') {
|
if val.starts_with('flag') {
|
||||||
// #flag linux -lm
|
// #flag linux -lm
|
||||||
mut flag := val[5..]
|
mut flag := val[5..]
|
||||||
|
|
Loading…
Reference in New Issue