--- ess.py- 2016-09-24 00:00:00.000000000 +0900 +++ ess.py 2016-09-26 00:00:00.000000000 +0900 @@ -628,14 +628,7 @@ def do_type_struct(e, val, info): do_blk(None, benv, body, info) return benv -def do_type_val(typ, arr_n, val, info): - if arr_n is False: - if typ[0] != 'struct': - if val is None: - return None - return do_expr(val, info) - return do_type_struct(typ, val, info) - +def do_type_arr(typ, arr_n, val, info): arr_n = do_expr(arr_n, info) if arr_n is not None: arr_n = int(arr_n) @@ -652,6 +645,21 @@ def do_type_val(typ, arr_n, val, info): vals = vals[:arr_n] return [ do_type_val(typ, False, val, info) for val in vals ] +def try_int(typ, v): + return int(v) if typ == [ 'int' ] and v is not None else v + +def do_type_val(typ, arr_n, val, info): + if arr_n is not False: + return do_type_arr(typ, arr_n, val, info) + + if typ[0] == 'struct': + return do_type_struct(typ, val, info) + + if val is None: + return None + + return try_int( typ, do_expr(val, info) ) + def do_type(expr, info): typ = expr[1] for e in flat_comma( expr[2] ): @@ -749,7 +757,9 @@ def do_fcall(name, args, info): (args_info, ret_type, body) = fdef[2:] (_, _, args_lst) = args_info + types = [ e[1] for e in args_lst if e[0] == 'type' ] names = [ e[1] for e in args_lst if e[0] == 'name' ] + args = [ try_int(t, v) for (t, v) in zip(types, args) ] env = dict( zip(names, args) ) do_blk(name, env, body, info) @@ -757,7 +767,7 @@ def do_fcall(name, args, info): was_flags(info, 'break') was_flags(info, 'continue') ret = info.pop('ret', None) - return ret + return try_int( ret_type[1], ret ) def do_global(lst, verb): genv = {}