diff options
Diffstat (limited to 'lib/compiler')
| -rw-r--r-- | lib/compiler/src/beam_asm.erl | 2 | ||||
| -rw-r--r-- | lib/compiler/src/beam_disasm.erl | 7 | 
2 files changed, 7 insertions, 2 deletions
| diff --git a/lib/compiler/src/beam_asm.erl b/lib/compiler/src/beam_asm.erl index a7c8508321..98967e651f 100644 --- a/lib/compiler/src/beam_asm.erl +++ b/lib/compiler/src/beam_asm.erl @@ -387,7 +387,7 @@ encode_arg({list, List}, Dict0) ->      {L, Dict} = encode_list(List, Dict0, []),      {[encode(?tag_z, 1), encode(?tag_u, length(List))|L], Dict};  encode_arg({float, Float}, Dict) when is_float(Float) -> -    {[encode(?tag_z, 0),<<Float:64/float>>], Dict}; +    encode_arg({literal,Float}, Dict);  encode_arg({fr,Fr}, Dict) ->      {[encode(?tag_z, 2),encode(?tag_u, Fr)], Dict};  encode_arg({field_flags,Flags0}, Dict) -> diff --git a/lib/compiler/src/beam_disasm.erl b/lib/compiler/src/beam_disasm.erl index 62bdc74cc8..67d756c45c 100644 --- a/lib/compiler/src/beam_disasm.erl +++ b/lib/compiler/src/beam_disasm.erl @@ -512,7 +512,12 @@ decode_z_tagged(Tag,B,Bs,Literals) when (B band 16#08) =:= 0 ->  	    decode_alloc_list(Bs, Literals);  	4 -> % literal  	    {{u,LitIndex},RestBs} = decode_arg(Bs), -	    {{literal,gb_trees:get(LitIndex, Literals)},RestBs}; +	    case gb_trees:get(LitIndex, Literals) of +		Float when is_float(Float) -> +		    {{float,Float},RestBs}; +		Literal -> +		    {{literal,Literal},RestBs} +	    end;  	_ ->  	    ?exit({decode_z_tagged,{invalid_extended_tag,N}})      end; | 
