From 7c4e7fe077f484fb61fedc750cc02f237eb9cdfe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Wed, 8 Aug 2012 09:23:43 -0300 Subject: [PATCH] Allow nested access --- lib/elixir/lib/binary/dict.ex | 2 +- lib/elixir/lib/dict.ex | 2 +- lib/elixir/lib/hash_dict.ex | 2 +- lib/elixir/lib/orddict.ex | 2 +- lib/elixir/src/elixir_parser.yrl | 2 +- lib/elixir/test/elixir/access_test.exs | 1 + 6 files changed, 6 insertions(+), 5 deletions(-) diff --git a/lib/elixir/lib/binary/dict.ex b/lib/elixir/lib/binary/dict.ex index db62843274..40f18299a9 100644 --- a/lib/elixir/lib/binary/dict.ex +++ b/lib/elixir/lib/binary/dict.ex @@ -31,7 +31,7 @@ defmodule Binary.Dict do :orddict.is_key to_binary(key), data end - def get(dict(data), key, default // nil) do + def get(dict(data), key, default) do case :orddict.find(to_binary(key), data) do {:ok, value} -> value :error -> default diff --git a/lib/elixir/lib/dict.ex b/lib/elixir/lib/dict.ex index 90bad09319..bb526af368 100644 --- a/lib/elixir/lib/dict.ex +++ b/lib/elixir/lib/dict.ex @@ -8,7 +8,7 @@ defmodule Dict do @doc false def behaviour_info(:callbacks) do - [delete: 2, empty: 1, get: 2, get: 3, has_key?: 2, + [delete: 2, empty: 1, get: 3, has_key?: 2, keys: 1, merge: 3, put: 3, size: 1, to_list: 1, update: 3, update: 4, values: 1] end diff --git a/lib/elixir/lib/hash_dict.ex b/lib/elixir/lib/hash_dict.ex index 4bb387d4b4..450b7b4ec1 100644 --- a/lib/elixir/lib/hash_dict.ex +++ b/lib/elixir/lib/hash_dict.ex @@ -33,7 +33,7 @@ defmodule HashDict do :dict.is_key key, data end - def get(dict(data), key, default // nil) do + def get(dict(data), key, default) do case :dict.find(key, data) do {:ok, value} -> value :error -> default diff --git a/lib/elixir/lib/orddict.ex b/lib/elixir/lib/orddict.ex index b15af0b1ee..c463a5903e 100644 --- a/lib/elixir/lib/orddict.ex +++ b/lib/elixir/lib/orddict.ex @@ -32,7 +32,7 @@ defmodule Orddict do :orddict.is_key key, data end - def get(dict(data), key, default // nil) do + def get(dict(data), key, default) do case :orddict.find(key, data) do {:ok, value} -> value :error -> default diff --git a/lib/elixir/src/elixir_parser.yrl b/lib/elixir/src/elixir_parser.yrl index 3b376786ce..b7b60b7899 100644 --- a/lib/elixir/src/elixir_parser.yrl +++ b/lib/elixir/src/elixir_parser.yrl @@ -155,7 +155,7 @@ call_expr -> var : build_identifier('$1', nil). call_expr -> bracket_expr : '$1'. bracket_expr -> dot_bracket_identifier bracket_access : build_access(build_identifier('$1', nil), '$2'). -bracket_expr -> max_expr bracket_access : build_access('$1', '$2'). +bracket_expr -> bracket_expr bracket_access : build_access('$1', '$2'). bracket_expr -> max_expr : '$1'. max_expr -> parens_call call_args_parens : build_identifier('$1', '$2'). diff --git a/lib/elixir/test/elixir/access_test.exs b/lib/elixir/test/elixir/access_test.exs index f35109e2d1..2d9d752e56 100644 --- a/lib/elixir/test/elixir/access_test.exs +++ b/lib/elixir/test/elixir/access_test.exs @@ -5,6 +5,7 @@ defmodule Access.TupleTest do test :list do assert [foo: :bar][:foo] == :bar + assert [foo: [bar: :baz]][:foo][:bar] == :baz end test :function do