@@ -156,7 +156,6 @@ defmodule Record do
156
156
end
157
157
158
158
contents = quote do
159
-
160
159
defmacrop unquote ( name ) ( ) do
161
160
Record . access ( unquote ( tag ) || __MODULE__ , unquote ( escaped ) , [ ] , __CALLER__ )
162
161
end
@@ -242,7 +241,8 @@ defmodule Record do
242
241
{ match , remaining } = :lists . mapfoldl ( iterator , keyword , fields )
243
242
244
243
case remaining do
245
- [ ] -> { :{} , [ line: caller . line ] , [ atom | match ] }
244
+ [ ] ->
245
+ quote do: { unquote_splicing ( [ atom | match ] ) }
246
246
_ ->
247
247
keys = lc { key , _ } in list remaining , do: key
248
248
raise "record #{ inspect atom } does not have the keys: #{ inspect keys } "
@@ -416,6 +416,7 @@ defmodule Record do
416
416
quoted = lc { k , _ } in list values do
417
417
index = find_index ( values , k , 0 )
418
418
quote do
419
+ @ doc false
419
420
def __index__ ( unquote ( k ) ) , do: unquote ( index + 1 )
420
421
end
421
422
end
@@ -458,27 +459,27 @@ defmodule Record do
458
459
#
459
460
# It will define four methods:
460
461
#
461
- # def : atime. (record) do
462
+ # def atime(record) do
462
463
# elem(record, 1)
463
464
# end
464
465
#
465
- # def : mtime. (record) do
466
+ # def mtime(record) do
466
467
# elem(record, 2)
467
468
# end
468
469
#
469
- # def : atime. (value, record) do
470
+ # def atime(value, record) do
470
471
# set_elem(record, 1, value)
471
472
# end
472
473
#
473
- # def : mtime. (record) do
474
+ # def mtime(record) do
474
475
# set_elem(record, 2, value)
475
476
# end
476
477
#
477
- # def : atime. (callback, record) do
478
+ # def atime(callback, record) do
478
479
# set_elem(record, 1, callback.(elem(record, 1)))
479
480
# end
480
481
#
481
- # def : mtime. (callback, record) do
482
+ # def mtime(callback, record) do
482
483
# set_elem(record, 2, callback.(elem(record, 2)))
483
484
# end
484
485
#
@@ -525,7 +526,7 @@ defmodule Record do
525
526
end
526
527
end
527
528
528
- contents = { :{} , [ ] , [ ( quote do: __MODULE__ ) | fields ] }
529
+ contents = quote do: { __MODULE__ , unquote_splicing ( fields ) }
529
530
530
531
quote do
531
532
@ doc false
@@ -571,6 +572,8 @@ defmodule Record do
571
572
@ spec new ( options | tuple ) :: t
572
573
@ spec to_keywords ( t ) :: options
573
574
@ spec update ( options , t ) :: t
575
+ @ spec __record__ ( :name ) :: atom
576
+ @ spec __record__ ( :fields ) :: [ { atom , any } ]
574
577
@ spec __index__ ( atom ) :: non_neg_integer | nil
575
578
end
576
579
end
0 commit comments