Jens Geyer created THRIFT-5992:
----------------------------------
Summary: Haxe generator: keyword escaping, stdlib-type renaming,
typedef import and FIELD_ID fixes
Key: THRIFT-5992
URL: https://issues.apache.org/jira/browse/THRIFT-5992
Project: Thrift
Issue Type: Bug
Components: Haxe - Compiler
Reporter: Jens Geyer
The Haxe code generator has several related issues that cause generated code to
fail to compile:
1. *Reserved keyword collision*: Haxe has 45 reserved keywords (e.g. {{var}},
{{function}}, {{class}}, {{import}}, {{if}}, {{for}}, etc.). When a Thrift
field, parameter, or local variable name matches one of these, the generated
Haxe code is syntactically invalid. Fix: add an {{escape_haxe_keyword()}}
helper and apply it at all field/parameter/local-variable naming sites.
2. *Stdlib type name collision*: When the capitalized form of a Thrift type
name matches a Haxe standard-library type (e.g. {{Map}}, {{Set}}, {{List}},
{{Enum}}, {{Lambda}}, {{Date}}, {{Type}}, {{Math}}, {{Reflect}}, {{Std}},
etc.), the generated identifier silently shadows the stdlib type, causing
compilation errors. Fix: extend {{get_cap_name()}} to append {{_}} when the
result conflicts with a known stdlib type name.
3. *Spurious import for base-type typedefs*: When a Thrift typedef aliases a
base type (e.g. {{typedef i32 MyInt}}), the generator emits an {{import}} for
it even though no Haxe class file is generated for base-type typedefs. This
produces an unresolvable import error. Fix: {{haxe_thrift_add_import()}} now
skips base-type typedef targets.
4. *FIELD_ID constant name mismatch*: In {{generate_reflection_getters()}} and
{{generate_reflection_setters()}}, the FIELD_ID constant is referenced using
the raw field name rather than the escaped name. When the field name is a
reserved keyword, the constant is generated under the escaped name (e.g.
{{var_}} FIELD_ID) but referenced under the raw name, causing a compilation
error. Fix: use the escaped name consistently.
5. *Test script Linux/macOS compatibility*: {{run-Haxe-Codegen-Tests.ps1}} used
Windows path separators in {{InitializeFolder}} calls. Fixed for cross-platform
compatibility.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)