- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
using Microsoft.VisualBasic.CompilerServices;
using System;
namespace ConsoleApplication2
{
[StandardModule]
internal sealed class Module1
{
[STAThread]
public static void Main()
{
label_0:
int num1;
int num2;
try
{
ProjectData.ClearProjectError();
num1 = 1;
label_1:
int num3 = 2;
Test.TTT();
goto label_8;
label_3:
num2 = num3;
switch (num1)
{
case 1:
int num4 = num2 + 1;
num2 = 0;
switch (num4)
{
case 1:
goto label_0;
case 2:
goto label_1;
case 3:
case 4:
goto label_8;
}
}
}
catch (Exception ex) when (ex is Exception & (uint) num1 > 0U & num2 == 0)
{
ProjectData.SetProjectError(ex);
goto label_3;
}
throw ProjectData.CreateProjectError(-2146828237);
label_8:
if (num2 == 0)
return;
ProjectData.ClearProjectError();
}
}
}
Вот какая жуть получилась при декомпиляции старого доброго On Error Resume Next из VB.
Исходный код:
Sub Main()
On Error Resume Next
TTT() 'определен в модуле Test
Exit Sub
End Sub
gost 23.05.2016 14:00 # +1
guesto 24.05.2016 12:21 # +5
gost 24.05.2016 12:29 # 0
Гсто, т прнс?
Dummy00001 23.05.2016 14:27 # +3
вы это называете жутью наверное потому что вам еще не приходилось выхлоп крестового компилера в дизассемблере расковыривать.
bormand 23.05.2016 18:50 # 0
И уж тем более - читать ошибки на выхлопе крестового компилера, когда используется что-нибудь из буста...
CHayT 23.05.2016 18:55 # +4
(при условии, что код твой)
вот как быть, если бустоговно пролилось в чужом коде, я не представляю, даже не хочу думать об этом
Dummy00001 23.05.2016 14:35 # 0
bormand 23.05.2016 19:50 # +3
num2 - строка, на которую надо прыгнуть после ошибки (видимо, при on error goto N там было бы конкретное число, а на resume next туда ложат num3)
num3 - номер стейтмента, который собирались выполнять, для resume next
num4 - номер стейтмента, куда надо прыгнуть
Строки 30-39 - табличка для прыжка на нужный стейтмент по его номеру (для каждой строки, 1 - на on error resume next, 2 - на Test.TTT(), 3 - на exit sub, на 4 - неявный выход?).
num1 > 0U & num2 == 0 в строке 42 - "если включена обработка ошибок и строка не указана (resume next)".
Как-то так, наверное.
Dummy00001 23.05.2016 20:14 # +2
bormand 23.05.2016 21:21 # +1
bormand 23.05.2016 18:52 # +2
bormand 23.05.2016 18:58 # +2
Вот это тоже ахуенно.
kerman 23.05.2016 23:13 # 0
Dummy00001 24.05.2016 12:18 # 0
guesto 24.05.2016 12:20 # 0
Dummy00001 24.05.2016 12:21 # 0
...неожиданно, все очень правдоподобно: http://goo.gl/CQoHHp
surprise buttsexcommon sense.