utils.js 3.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. import {Il2CppTypeEnum} from "../Il2CppTypeEnum";
  2. import {log} from "../../logger";
  3. import {Tabledefs as tabledefs} from "../tabledefs";
  4. export var utils = {
  5. readTypeEnumValue: function (pointer, typeEnum, fieldClass) {
  6. switch (typeEnum) {
  7. case Il2CppTypeEnum.IL2CPP_TYPE_BOOLEAN:
  8. return !!pointer.readS8();
  9. case Il2CppTypeEnum.IL2CPP_TYPE_I1:
  10. return pointer.readS8();
  11. case Il2CppTypeEnum.IL2CPP_TYPE_I2:
  12. return pointer.readS16();
  13. case Il2CppTypeEnum.IL2CPP_TYPE_U2:
  14. return pointer.readU16();
  15. case Il2CppTypeEnum.IL2CPP_TYPE_I4:
  16. return pointer.readS32();
  17. case Il2CppTypeEnum.IL2CPP_TYPE_U4:
  18. return pointer.readU32();
  19. case Il2CppTypeEnum.IL2CPP_TYPE_CHAR:
  20. return pointer.readU16();
  21. case Il2CppTypeEnum.IL2CPP_TYPE_I8:
  22. return pointer.readS64();
  23. case Il2CppTypeEnum.IL2CPP_TYPE_U8:
  24. return pointer.readU64();
  25. case Il2CppTypeEnum.IL2CPP_TYPE_R4:
  26. return pointer.readFloat();
  27. case Il2CppTypeEnum.IL2CPP_TYPE_R8:
  28. return pointer.readDouble();
  29. case Il2CppTypeEnum.IL2CPP_TYPE_VALUETYPE:
  30. let enumBaseType = fieldClass.getEnumBaseType();
  31. // log("baseType:"+enumBaseType.getTypeEnum()+"pointer:"+pointer.readS32());
  32. if (enumBaseType.getTypeEnum() === Il2CppTypeEnum.IL2CPP_TYPE_I4) {
  33. return pointer.readS32();
  34. }
  35. return null;
  36. default:
  37. return null;
  38. }
  39. }
  40. ,
  41. get_method_static:function (flags){
  42. if (flags & tabledefs.METHOD_ATTRIBUTE_STATIC){
  43. return true;
  44. }else {
  45. return false;
  46. }
  47. },
  48. get_method_modifier: function (flags) {
  49. let content;
  50. let access = flags & tabledefs.METHOD_ATTRIBUTE_MEMBER_ACCESS_MASK;
  51. switch (access) {
  52. case tabledefs.METHOD_ATTRIBUTE_PRIVATE:
  53. content = "private ";
  54. break;
  55. case tabledefs.METHOD_ATTRIBUTE_PUBLIC:
  56. content = "public ";
  57. break;
  58. case tabledefs.METHOD_ATTRIBUTE_FAMILY:
  59. content = "protected ";
  60. break;
  61. case tabledefs.METHOD_ATTRIBUTE_ASSEM:
  62. case tabledefs.METHOD_ATTRIBUTE_FAM_AND_ASSEM:
  63. content = "internal ";
  64. break;
  65. case tabledefs.METHOD_ATTRIBUTE_FAM_OR_ASSEM:
  66. content = "protected internal ";
  67. break;
  68. }
  69. if (flags & tabledefs.METHOD_ATTRIBUTE_STATIC) {
  70. content = content + "static ";
  71. }
  72. if (flags & tabledefs.METHOD_ATTRIBUTE_ABSTRACT) {
  73. content = content+ "abstract ";
  74. if ((flags & tabledefs.METHOD_ATTRIBUTE_VTABLE_LAYOUT_MASK) === tabledefs.METHOD_ATTRIBUTE_REUSE_SLOT) {
  75. content = content+ "override ";
  76. }
  77. } else if (flags & tabledefs.METHOD_ATTRIBUTE_FINAL) {
  78. if ((flags & tabledefs.METHOD_ATTRIBUTE_VTABLE_LAYOUT_MASK) === tabledefs.METHOD_ATTRIBUTE_REUSE_SLOT) {
  79. content = content+ "sealed override ";
  80. }
  81. } else if (flags & tabledefs.METHOD_ATTRIBUTE_VIRTUAL) {
  82. if ((flags & tabledefs.METHOD_ATTRIBUTE_VTABLE_LAYOUT_MASK) === tabledefs.METHOD_ATTRIBUTE_NEW_SLOT) {
  83. content = content+ "virtual ";
  84. } else {
  85. content = content+ "override ";
  86. }
  87. }
  88. if (flags & tabledefs.METHOD_ATTRIBUTE_PINVOKE_IMPL) {
  89. content = content+ "extern ";
  90. }
  91. return content;
  92. }
  93. }