@@ -273,6 +273,22 @@ package body reader is
273273 new_seq_obj(list_type, seq, result);
274274 end procedure read_sequence;
275275
276+ procedure read_map(r: inout reader_class; result: out mal_val_ptr; err: out mal_val_ptr) is
277+ variable sub_result, sub_err, new_map: mal_val_ptr;
278+ begin
279+ read_sequence(mal_hashmap, " }" , r, sub_result, sub_err);
280+ if sub_err = null then
281+ new_empty_hashmap(new_map);
282+ for i in 0 to sub_result.seq_val'length / 2 - 1 loop
283+ hashmap_put(new_map, result.seq_val(2 * i), result.seq_val(2 * i + 1 ));
284+ end loop ;
285+ result := new_map;
286+ else
287+ err := sub_err;
288+ result := null ;
289+ end if ;
290+ end procedure read_map;
291+
276292 procedure reader_macro(r: inout reader_class; result: out mal_val_ptr; err: out mal_val_ptr; sym_name: in string ) is
277293 variable token, sym_line: line ;
278294 variable seq: mal_seq_ptr;
@@ -343,7 +359,7 @@ package body reader is
343359 when ' )' => new_string(" unexcepted ')'" , err);
344360 when ' [' => read_sequence(mal_vector, " ]" , r, result, err);
345361 when ' ]' => new_string(" unexcepted ']'" , err);
346- when ' {' => read_sequence(mal_hashmap, " } " , r, result, err);
362+ when ' {' => read_map( r, result, err);
347363 when ' }' => new_string(" unexcepted '}'" , err);
348364 when others => read_atom(r, result, err);
349365 end case ;
0 commit comments