parser: second batch of start_tmp()
parent
00b3557ce1
commit
887c94d9ba
|
@ -1317,11 +1317,10 @@ fn (p mut Parser) fn_call_vargs(f Fn) (string, []string) {
|
||||||
if p.tok == .comma {
|
if p.tok == .comma {
|
||||||
p.check(.comma)
|
p.check(.comma)
|
||||||
}
|
}
|
||||||
p.cgen.start_tmp()
|
varg_type, varg_value := p.tmp_expr()
|
||||||
mut varg_type := p.bool_expression()
|
|
||||||
varg_value := p.cgen.end_tmp()
|
|
||||||
if varg_type.starts_with('varg_') &&
|
if varg_type.starts_with('varg_') &&
|
||||||
(values.len > 0 || p.tok == .comma) {
|
(values.len > 0 || p.tok == .comma)
|
||||||
|
{
|
||||||
p.error('You cannot pass additional vargs when forwarding vargs to another function/method')
|
p.error('You cannot pass additional vargs when forwarding vargs to another function/method')
|
||||||
}
|
}
|
||||||
if !f.is_generic {
|
if !f.is_generic {
|
||||||
|
|
|
@ -65,8 +65,7 @@ fn (p mut Parser) for_st() {
|
||||||
p.check(.key_in)
|
p.check(.key_in)
|
||||||
p.fspace()
|
p.fspace()
|
||||||
tmp := p.get_tmp()
|
tmp := p.get_tmp()
|
||||||
p.cgen.start_tmp()
|
mut typ, expr := p.tmp_expr()
|
||||||
mut typ := p.bool_expression()
|
|
||||||
is_arr := typ.starts_with('array_')
|
is_arr := typ.starts_with('array_')
|
||||||
is_map := typ.starts_with('map_')
|
is_map := typ.starts_with('map_')
|
||||||
is_str := typ == 'string'
|
is_str := typ == 'string'
|
||||||
|
@ -74,7 +73,6 @@ fn (p mut Parser) for_st() {
|
||||||
if !is_arr && !is_str && !is_map && !is_variadic_arg {
|
if !is_arr && !is_str && !is_map && !is_variadic_arg {
|
||||||
p.error('cannot range over type `$typ`')
|
p.error('cannot range over type `$typ`')
|
||||||
}
|
}
|
||||||
expr := p.cgen.end_tmp()
|
|
||||||
if !is_variadic_arg {
|
if !is_variadic_arg {
|
||||||
if p.is_js {
|
if p.is_js {
|
||||||
p.genln('var $tmp = $expr;')
|
p.genln('var $tmp = $expr;')
|
||||||
|
@ -125,18 +123,16 @@ fn (p mut Parser) for_st() {
|
||||||
p.check(.key_in)
|
p.check(.key_in)
|
||||||
p.fspace()
|
p.fspace()
|
||||||
tmp := p.get_tmp()
|
tmp := p.get_tmp()
|
||||||
p.cgen.start_tmp()
|
mut typ, expr := p.tmp_expr()
|
||||||
mut typ := p.bool_expression()
|
|
||||||
expr := p.cgen.end_tmp()
|
|
||||||
is_range := p.tok == .dotdot
|
is_range := p.tok == .dotdot
|
||||||
is_variadic_arg := typ.starts_with('varg_')
|
is_variadic_arg := typ.starts_with('varg_')
|
||||||
mut range_end := ''
|
mut range_end := ''
|
||||||
if is_range {
|
if is_range {
|
||||||
p.check_types(typ, 'int')
|
p.check_types(typ, 'int')
|
||||||
p.check_space(.dotdot)
|
p.check_space(.dotdot)
|
||||||
p.cgen.start_tmp()
|
range_typ, range_expr := p.tmp_expr()
|
||||||
p.check_types(p.bool_expression(), 'int')
|
p.check_types(range_typ, 'int')
|
||||||
range_end = p.cgen.end_tmp()
|
range_end = range_expr
|
||||||
}
|
}
|
||||||
is_arr := typ.contains('array')
|
is_arr := typ.contains('array')
|
||||||
is_str := typ == 'string'
|
is_str := typ == 'string'
|
||||||
|
|
|
@ -2649,9 +2649,9 @@ fn (p mut Parser) return_st() {
|
||||||
types << expr_type
|
types << expr_type
|
||||||
for p.tok == .comma {
|
for p.tok == .comma {
|
||||||
p.check(.comma)
|
p.check(.comma)
|
||||||
p.cgen.start_tmp()
|
typ, expr := p.tmp_expr()
|
||||||
types << p.bool_expression()
|
types << typ
|
||||||
mr_values << p.cgen.end_tmp().trim_space()
|
mr_values << expr.trim_space()
|
||||||
}
|
}
|
||||||
mut cur_fn_typ_chk := p.cur_fn.typ
|
mut cur_fn_typ_chk := p.cur_fn.typ
|
||||||
// multiple returns
|
// multiple returns
|
||||||
|
@ -2804,9 +2804,8 @@ fn (p mut Parser) js_decode() string {
|
||||||
p.check(.lpar)
|
p.check(.lpar)
|
||||||
typ := p.get_type()
|
typ := p.get_type()
|
||||||
p.check(.comma)
|
p.check(.comma)
|
||||||
p.cgen.start_tmp()
|
styp, expr := p.tmp_expr()
|
||||||
p.check_types(p.bool_expression(), 'string')
|
p.check_types(styp, 'string')
|
||||||
expr := p.cgen.end_tmp()
|
|
||||||
p.check(.rpar)
|
p.check(.rpar)
|
||||||
tmp := p.get_tmp()
|
tmp := p.get_tmp()
|
||||||
cjson_tmp := p.get_tmp()
|
cjson_tmp := p.get_tmp()
|
||||||
|
@ -2816,7 +2815,7 @@ fn (p mut Parser) js_decode() string {
|
||||||
for field in T.fields {
|
for field in T.fields {
|
||||||
def_val := type_default(field.typ)
|
def_val := type_default(field.typ)
|
||||||
if def_val != '' {
|
if def_val != '' {
|
||||||
decl += '$tmp . $field.name = OPTION_CAST($field.typ) $def_val;\n'
|
decl += '${tmp}.$field.name = OPTION_CAST($field.typ) $def_val;\n'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
p.gen_json_for_type(T)
|
p.gen_json_for_type(T)
|
||||||
|
@ -2831,11 +2830,9 @@ fn (p mut Parser) js_decode() string {
|
||||||
}
|
}
|
||||||
else if op == 'encode' {
|
else if op == 'encode' {
|
||||||
p.check(.lpar)
|
p.check(.lpar)
|
||||||
p.cgen.start_tmp()
|
typ, expr := p.tmp_expr()
|
||||||
typ := p.bool_expression()
|
|
||||||
T := p.table.find_type(typ)
|
T := p.table.find_type(typ)
|
||||||
p.gen_json_for_type(T)
|
p.gen_json_for_type(T)
|
||||||
expr := p.cgen.end_tmp()
|
|
||||||
p.check(.rpar)
|
p.check(.rpar)
|
||||||
p.gen('json__json_print(json__jsencode_$typ($expr))')
|
p.gen('json__json_print(json__jsencode_$typ($expr))')
|
||||||
return 'string'
|
return 'string'
|
||||||
|
|
|
@ -135,9 +135,11 @@ fn get_foo() Foo {
|
||||||
|
|
||||||
// This used to be broken.
|
// This used to be broken.
|
||||||
fn test_ref_fn_arg() {
|
fn test_ref_fn_arg() {
|
||||||
|
$if !tinyc {
|
||||||
process_foo(get_foo())
|
process_foo(get_foo())
|
||||||
println(3434)
|
println(3434)
|
||||||
assert true
|
assert true
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
res := (time.random().calc_unix())
|
res := (time.random().calc_unix())
|
||||||
|
|
Loading…
Reference in New Issue