--- esm.py- 2016-09-17 00:00:00.000000000 +0900 +++ esm.py 2016-09-18 00:00:00.000000000 +0900 @@ -582,17 +582,30 @@ def do_comma(e, info): lst = flat_comma(e) return [ do_expr(e, info) for e in lst ] +def do_type_arr(e, val, info): + idx = e[2] + n = do_expr(idx, info) + if n is not None: + n = int(n) + if val and val[:2] == [ 'br_s', '{' ]: + val = val[2][0] + val = do_comma(val, info); + if n and n > len(val): + val += [ None ] * ( n - len(val) ) + else: + val = [ None ] * n + return val + def do_type(expr, info): for e in flat_comma( expr[2] ): val = None if e[:2] == [ 'op', '=' ]: - val = do_expr( e[3], info ) + val = e[3] e = e[2] if e[0] == 'arr': - idx = e[2] - n = int( do_expr(idx, info) ) - if val is None: - val = [ None ] * n + val = do_type_arr(e, val, info) + elif val: + val = do_expr(val, info) name = e[1] new_val(name, val, info) return None @@ -611,8 +624,8 @@ def do_expr(expr, info): return get_val(v, info) if k == 'br_s': if v in [ '(', '[' ]: # '[' for do_arr() - e = expr[2][0] - return do_expr(e, info) + lst = expr[2] + return do_expr( lst[0], info ) if len(lst) > 0 else None if v == '{': do_blk(None, {}, expr, info) return None