[ 
https://issues.apache.org/jira/browse/THRIFT-5994?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Jens Geyer resolved THRIFT-5994.
--------------------------------
    Fix Version/s: 0.24.0
         Assignee: Jens Geyer
       Resolution: Fixed

> Haxe generator: map<bool,V>, map<double,V>, map<binary,V> and set equivalents 
> generate invalid ObjectMap/ObjectSet
> ------------------------------------------------------------------------------------------------------------------
>
>                 Key: THRIFT-5994
>                 URL: https://issues.apache.org/jira/browse/THRIFT-5994
>             Project: Thrift
>          Issue Type: Bug
>          Components: Haxe - Compiler, Haxe - Library
>            Reporter: Jens Geyer
>            Assignee: Jens Geyer
>            Priority: Major
>             Fix For: 0.24.0
>
>
> When a Thrift IDL file uses {{bool}}, {{double}}, or {{binary}} as a map key 
> type or set element type, the Haxe generator emits {{ObjectMap<Bool,V>}}, 
> {{ObjectMap<Float,V>}}, {{ObjectMap<Bytes,V>}}, {{ObjectSet<Bool>}}, 
> {{ObjectSet<Float>}}, or {{ObjectSet<Bytes>}}. These usages are all invalid:
> - {{ObjectMap<K,V>}} and {{ObjectSet<K>}} require {{K : {}}} (a 
> reference/object type constraint). {{Bool}} and {{Float}} are Haxe value 
> types that do not satisfy this constraint, causing a compile-time type error.
> - {{Bytes}} satisfies the constraint structurally, but 
> {{ObjectMap}}/{{ObjectSet}} use reference equality. Two equal {{Bytes}} 
> values at different addresses are treated as distinct keys/elements, 
> producing semantically incorrect behaviour.
> Fix: add three new helper classes to the Thrift Haxe library:
> - {{BoolMap<T>}} / {{BoolSet}}: implement {{haxe.Constraints.IMap<Bool,T>}} 
> backed by {{IntMap<T>}} / {{IntMap<Int>}} with encoding {{k ? 1 : 0}}.
> - {{FloatMap<T>}} / {{FloatSet}}: implement 
> {{haxe.Constraints.IMap<Float,T>}} backed by {{StringMap<T>}} / 
> {{StringMap<Int>}} with keys stored as 8-byte IEEE 754 hex strings (via 
> {{Bytes.setDouble}}), giving exact equality semantics including NaN, -0.0, 
> and infinities.
> - {{BytesMap<T>}} / {{BytesSet}}: implement 
> {{haxe.Constraints.IMap<Bytes,T>}} backed by {{StringMap<T>}} / 
> {{StringMap<Int>}} with keys stored as hex strings ({{Bytes.toHex}}), giving 
> content equality semantics.
> Wire the new types in {{type_name()}}: {{map<bool,V>}} -> {{BoolMap}}, 
> {{map<double,V>}} -> {{FloatMap}}, {{map<binary,V>}} -> {{BytesMap}}; 
> {{set<bool>}} -> {{BoolSet}}, {{set<double>}} -> {{FloatSet}}, 
> {{set<binary>}} -> {{BytesSet}}.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to