Advertisement
Kuroneko-yousenpai

Switch-Case AS3 and P-code

May 12th, 2021 (edited)
2,946
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. =======================Конструкция "switch-case"=======================
  2.  
  3. Action Script 3:
  4.  
  5. switch(loginError.code)
  6.             {
  7.                case LoginError.INCORRECT_KEY:
  8.                   text = Messages.ERROR_AUTH_KEY;
  9.                   break;
  10.                case LoginError.PROFILACTIC_WORK:
  11.                   text = Messages.SERVER_UPDATE;
  12.                   break;
  13.                case LoginError.INTERNAL_SERVER_ERROR:
  14.                   text = Messages.ERROR_SERVER;
  15.             }
  16.             return null;
  17.  
  18. Action Script 3 Byte-code Assembler:
  19.  
  20. jump ofs00e6 //Заход в первое условие первого "case", "INCORRECT_KEY"
  21. ofs009f:label //Метка первого действия первого "case"
  22. debugline 180
  23. //-----Начало первого действия первого "case"-----
  24. getscopeobject 1
  25. findpropstrict Qname(PackageNamespace("ru.pragmatix.wormix.gui"),"Messages")
  26. getproperty Qname(PackageNamespace("ru.pragmatix.wormix.gui"),"Messages")
  27. getproperty Qname(PackageNamespace(""),"ERROR_AUTH_KEY")
  28. coerce_s
  29. setslot 3
  30. //-----Конец первого действия первого "case"-----
  31. debugline 181
  32. jump ofs014c //Джамп ведёт на выход из "switch-case"
  33. ofs00b5:label //Метка второго действия второго "case"
  34. debugline 183
  35. //-----Начало второго действия второго "case"-----
  36. getscopeobject 1
  37. findpropstrict Qname(PackageNamespace("ru.pragmatix.wormix.gui"),"Messages")
  38. getproperty Qname(PackageNamespace("ru.pragmatix.wormix.gui"),"Messages")
  39. getproperty Qname(PackageNamespace(""),"SERVER_UPDATE")
  40. coerce_s
  41. setslot 3
  42. //-----Конец второго действия второго "case"-----
  43. debugline 184
  44. jump ofs014c //Джамп ведёт на выход из "switch-case"
  45. ofs00cb:label //Метка третьего действия третьего "case"
  46. debugline 186
  47. //-----Начало третьего действия третьего "case"
  48. getscopeobject 1
  49. findpropstrict Qname(PackageNamespace("ru.pragmatix.wormix.gui"),"Messages")
  50. getproperty Qname(PackageNamespace("ru.pragmatix.wormix.gui"),"Messages")
  51. getproperty Qname(PackageNamespace(""),"ERROR_SERVER")
  52. coerce_s
  53. setslot 3
  54. //-----Конец третьего действия третьего "case"
  55. debugline 187
  56. jump ofs014c //Джамп ведёт на выход из "switch-case"
  57. ofs00e1:label //Метка для перехода на выход из "switch-case"
  58. jump ofs014c //Джамп ведёт на выход из "switch-case" (джамп метки выхода)
  59. ofs00e6:debugline 178 //Метка первого условия первого "case"
  60. //-----Назначение главного условия для "switch"-----
  61. getscopeobject 1
  62. getslot 2
  63. getproperty Qname(PackageNamespace(""),"code")
  64. setlocal_3
  65. //-----Конец назначения главного условия для "switch"-----
  66. debugline 179
  67. //-----Начало первого условия первого "case"-----
  68. findpropstrict Qname(PackageNamespace("ru.pragmatix.wormix.messages.server"),"LoginError")
  69. getproperty Qname(PackageNamespace("ru.pragmatix.wormix.messages.server"),"LoginError")
  70. getproperty Qname(PackageNamespace(""),"INCORRECT_KEY")
  71. getlocal_3
  72. //-----Конец первого условия первого "case"-----
  73. ifstrictne ofs0104 //Переход на условие второго "case", если первое условие не прошло
  74. pushshort 0 //Если условие прошло, то записывает себе ноль, помечая на какое действие надо перейти ; номер "caseTarget", для перехода на действие
  75. jump ofs0139 //Джамп для перехода на "lookupswitch"
  76. ofs0104:debugline 182 //Метка для перехода на второе условие второго "case", если первый "case" не прошёл по условию
  77. //-----Начало второго условия второго "case"-----
  78. findpropstrict Qname(PackageNamespace("ru.pragmatix.wormix.messages.server"),"LoginError")
  79. getproperty Qname(PackageNamespace("ru.pragmatix.wormix.messages.server"),"LoginError")
  80. getproperty Qname(PackageNamespace(""),"PROFILACTIC_WORK")
  81. getlocal_3
  82. //-----Конец второго условия второго "case"-----
  83. ifstrictne ofs0118 //Переход на условие третьего "case", если второе условие не прошло
  84. pushshort 1 //Номер "caseTarget", если второе условие прошло и надо перейти на второе действие второго условия
  85. jump ofs0139 //Джамп для перехода на "lookupswitch"
  86. ofs0118:debugline 185 //Метка для перехода на третье условие третьего "case", если второй "case" не прошёл по условию
  87. //-----Начало третьего условия третьего "case"-----
  88. findpropstrict Qname(PackageNamespace("ru.pragmatix.wormix.messages.server"),"LoginError")
  89. getproperty Qname(PackageNamespace("ru.pragmatix.wormix.messages.server"),"LoginError")
  90. getproperty Qname(PackageNamespace(""),"INTERNAL_SERVER_ERROR")
  91. getlocal_3
  92. //-----Конец третьего условия третьего "case"-----
  93. ifstrictne ofs012c //Переход на метку, если все три условия не прошли проверку
  94. pushshort 2 //Номер "caseTarget", если третье условие прошло и надо перейти на третье действие третьего условия
  95. jump ofs0139 //Джамп для перехода на "lookupswitch"
  96. ofs012c:pushfalse //Метка, если все три условия не подошли (а у нас нет дефолтного условия), записываем в стек "false"
  97. iffalse ofs0137 //Условие проверки на "false" и переход на метку, если "false"
  98. pushshort 3 //Номер "caseTarget", если не прошли по "iffalse" и при этом ни одно из условий не подошло (по-сути, мы на эту строчку никогда не перейдём)
  99. jump ofs0139 //Джамп для перехода на "lookupswitch"
  100. ofs0137:pushshort 3 //Если сработал переход по "iffalse", то записываем номер "caseTarget"
  101. ofs0139:kill 3 //Метка для перехода на "lookupswitch", перед этим убиваем третью локальную переменную (Kill getlocal_3)
  102. lookupswitch ofs00e1 3 ofs009f ofs00b5 ofs00cb ofs00e1 //lookupswitch defaultTarget:labelName, caseCount:null, case0Target:labelName, case1Target:labelName, ...
  103. ofs014c:debugline 189 //Выход из "switch-case"
  104. pushnull
  105. returnvalue
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement