js: remove usage of default arguments for `-es5` flag (#12921)
parent
07cf6d9f96
commit
b68c217d53
|
@ -300,7 +300,7 @@ struct BuiltinPrototypeConfig {
|
|||
}
|
||||
|
||||
fn (mut g JsGen) gen_builtin_prototype(c BuiltinPrototypeConfig) {
|
||||
g.writeln('function ${c.typ_name}($c.val_name = $c.default_value) { $c.constructor }')
|
||||
g.writeln('function ${c.typ_name}($c.val_name) { if ($c.val_name === undefined) { $c.val_name = $c.default_value; }$c.constructor }')
|
||||
g.writeln('${c.typ_name}.prototype = {')
|
||||
g.inc_indent()
|
||||
g.writeln('$c.val_name: $c.default_value,')
|
||||
|
|
|
@ -1836,29 +1836,57 @@ fn (mut g JsGen) gen_struct_decl(node ast.StructDecl) {
|
|||
js_name := g.js_name(name)
|
||||
g.gen_attrs(node.attrs)
|
||||
g.doc.gen_fac_fn(node.fields)
|
||||
g.write('function ${js_name}({ ')
|
||||
for i, field in node.fields {
|
||||
g.write('$field.name')
|
||||
mut keep := true
|
||||
for attr in field.attrs {
|
||||
if attr.name == 'noinit' {
|
||||
keep = false
|
||||
if g.pref.output_es5 {
|
||||
obj := g.new_tmp_var()
|
||||
g.writeln('function ${js_name}($obj) {')
|
||||
g.inc_indent()
|
||||
g.writeln('if ($obj === undefined) { obj = {}; }')
|
||||
for field in node.fields {
|
||||
mut keep := true
|
||||
for attr in field.attrs {
|
||||
if attr.name == 'noinit' {
|
||||
keep = false
|
||||
}
|
||||
}
|
||||
if keep {
|
||||
g.writeln('if (${obj}.$field.name === undefined) {')
|
||||
g.write('${obj}.$field.name = ')
|
||||
if field.has_default_expr {
|
||||
g.expr(field.default_expr)
|
||||
} else {
|
||||
g.write('${g.to_js_typ_val(field.typ)}')
|
||||
}
|
||||
g.writeln('\n}')
|
||||
}
|
||||
g.writeln('var $field.name = ${obj}.$field.name;')
|
||||
}
|
||||
if keep {
|
||||
g.write(' = ')
|
||||
|
||||
if field.has_default_expr {
|
||||
g.expr(field.default_expr)
|
||||
} else {
|
||||
g.write('${g.to_js_typ_val(field.typ)}')
|
||||
g.dec_indent()
|
||||
} else {
|
||||
g.write('function ${js_name}({ ')
|
||||
for i, field in node.fields {
|
||||
g.write('$field.name')
|
||||
mut keep := true
|
||||
for attr in field.attrs {
|
||||
if attr.name == 'noinit' {
|
||||
keep = false
|
||||
}
|
||||
}
|
||||
if keep {
|
||||
g.write(' = ')
|
||||
|
||||
if field.has_default_expr {
|
||||
g.expr(field.default_expr)
|
||||
} else {
|
||||
g.write('${g.to_js_typ_val(field.typ)}')
|
||||
}
|
||||
}
|
||||
if i < node.fields.len - 1 {
|
||||
g.write(', ')
|
||||
}
|
||||
}
|
||||
if i < node.fields.len - 1 {
|
||||
g.write(', ')
|
||||
}
|
||||
g.writeln(' }) {')
|
||||
}
|
||||
g.writeln(' }) {')
|
||||
g.inc_indent()
|
||||
for field in node.fields {
|
||||
g.writeln('this.$field.name = $field.name')
|
||||
|
|
Loading…
Reference in New Issue