Macro.macro.hx 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. import haxe.macro.Context;
  2. using haxe.macro.Tools;
  3. class Macro {
  4. public static function build() {
  5. var fields = Context.getBuildFields();
  6. var keywords = [
  7. "auto", "bool", "break", "case", "char", "const", "continue", "default", "do", "double", "else", "enum", "extern", "float", "for", "goto",
  8. "if", "int", "long", "register", "return", "short", "signed", "sizeof", "static", "struct", "switch", "typedef", "union", "unsigned",
  9. "void", "volatile", "while",
  10. // Values
  11. "NULL", "true", "false",
  12. // MS specific
  13. "asm", "dllimport2", "dllexport2", "naked2", "thread2",
  14. // reserved by HLC
  15. "t",
  16. // GCC
  17. "typeof",
  18. // C11
  19. "_Alignas", "_Alignof", "_Atomic", "_Bool", "_Complex", "_Generic", "_Imaginary", "_Noreturn", "_Static_assert", "_Thread_local", "_Pragma",
  20. "inline", "restrict", "_restrict"
  21. ];
  22. var pos = Context.currentPos();
  23. for (k in keywords) {
  24. fields.push({
  25. pos: pos,
  26. name: "_test_" + k,
  27. meta: [{pos: pos, name: ":native", params: [macro $v{k}]}],
  28. kind: FVar(macro :String, null)
  29. });
  30. fields.push({
  31. pos: pos,
  32. name: "_test2_" + k,
  33. meta: [{pos: pos, name: ":native", params: [macro $v{'__' + k}]}],
  34. kind: FVar(macro :String, null)
  35. });
  36. }
  37. return fields;
  38. }
  39. }