diff options
Diffstat (limited to 'lib/syntax_tools/src/igor.erl')
| -rw-r--r-- | lib/syntax_tools/src/igor.erl | 24 | 
1 files changed, 20 insertions, 4 deletions
diff --git a/lib/syntax_tools/src/igor.erl b/lib/syntax_tools/src/igor.erl index c8b5910cd3..4d18f7abcf 100644 --- a/lib/syntax_tools/src/igor.erl +++ b/lib/syntax_tools/src/igor.erl @@ -151,7 +151,8 @@ default_printer(Tree, Options) ->  %% @spec parse_transform(Forms::[syntaxTree()], Options::[term()]) ->  %%           [syntaxTree()]  %% -%%         syntaxTree() = erl_syntax:syntaxTree() +%% @type syntaxTree() = erl_syntax:syntaxTree(). An abstract syntax +%% tree. See the {@link erl_syntax} module for details.  %%  %% @doc Allows Igor to work as a component of the Erlang compiler.  %% Including the term `{parse_transform, igor}' in the @@ -212,7 +213,7 @@ merge(Name, Files) ->  %% @spec merge(Name::atom(), Files::[filename()], Options::[term()]) ->  %%           [filename()]  %% -%%	    filename() = file:filename() +%% @type filename() = file:filename()  %%  %% @doc Merges source code files to a single file. `Name'  %% specifies the name of the resulting module - not the name of the @@ -367,6 +368,7 @@ merge_files(Name, Files, Options) ->  %% @spec merge_files(Name::atom(), Sources::[Forms],  %%                   Files::[filename()], Options::[term()]) ->  %%           {syntaxTree(), [stubDescriptor()]} +%%  %%     Forms = syntaxTree() | [syntaxTree()]  %%  %% @doc Merges source code files and syntax trees to a single syntax @@ -1594,10 +1596,11 @@ alias_expansions_2(Modules, Table) ->  	       preserved  :: boolean(),  	       no_headers :: boolean(),  	       notes      :: notes(), -	       map        :: map_fun(), +	       map        :: map_fun() | 'undefined',  	       renaming   :: fun((atom()) -> map_fun()),  	       expand     :: dict:dict({atom(), integer()}, -                                       {atom(), {atom(), integer()}}), +                                       {atom(), {atom(), integer()}}) +                           | 'undefined',  	       redirect	  :: dict:dict(atom(), atom())  	      }). @@ -2611,6 +2614,19 @@ get_module_info(Forms) ->  fold_record_fields(Rs) ->      [{N, [fold_record_field(F) || F <- Fs]} || {N, Fs} <- Rs]. +fold_record_field({_Name, {none, _Type}} = None) -> +    None; +fold_record_field({Name, {F, Type}}) -> +    case erl_syntax:is_literal(F) of +	true -> +	    {Name, {value, erl_syntax:concrete(F)}, Type}; +	false -> +	    %% The default value for the field is not a constant, so we +	    %% represent it by a hash value instead. (We don't want to +	    %% do this in the general case.) +	    {Name, {hash, erlang:phash(F, 16#ffffff)}, Type} +    end; +%% The following two clauses handle code before Erlang/OTP 19.0.  fold_record_field({_Name, none} = None) ->      None;  fold_record_field({Name, F}) ->  | 
