ЙажаСценарий / Говнокод #27382 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 56
  57. 57
  58. 58
  59. 59
  60. 60
  61. 61
  62. 62
  63. 63
  64. 64
  65. 65
  66. 66
  67. 67
  68. 68
  69. 69
  70. 70
  71. 71
  72. 72
  73. 73
  74. 74
  75. 75
  76. 76
  77. 77
  78. 78
function f1() 
{               
  print("Hello World!");    
}

function run(f: () => void)
{
  f();
}

function main() {    
 const x = f1;
 x();                                
 run(x);
}

// LLVM IL 

; ModuleID = 'LLVMDialectModule'
source_filename = "LLVMDialectModule"
target datalayout = "e-m:w-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-pc-windows-msvc"

@frmt_11120820245497078329 = internal constant [4 x i8] c"%s\0A\00"
@s_11208736881023205110 = internal constant [14 x i8] c"Hello World!\00\00"

declare i8* @malloc(i64)

declare void @free(i8*)

declare i32 @printf(i8*, ...)

define void @f1() !dbg !3 {
  %1 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @frmt_11120820245497078329, i64 0, i64 0), i8* getelementptr inbounds ([14 x i8], [14 x i8]* @s_11208736881023205110, i64 0, i64 0)), !dbg !7
  br label %2, !dbg !9

2:                                                ; preds = %0
  ret void, !dbg !9
}

define void @run(void ()* %0) !dbg !10 {
  %2 = alloca void ()*, align 8, !dbg !11
  store void ()* %0, void ()** %2, align 8, !dbg !11
  %3 = load void ()*, void ()** %2, align 8, !dbg !11
  call void %3(), !dbg !13
  br label %4, !dbg !14

4:                                                ; preds = %1
  ret void, !dbg !14
}

define void @main() !dbg !15 {
  %1 = alloca void ()*, align 8, !dbg !16
  %2 = alloca void ()*, align 8, !dbg !19
  store void ()* @f1, void ()** %2, align 8, !dbg !19
  %3 = load void ()*, void ()** %2, align 8, !dbg !19
  call void %3(), !dbg !20
  %4 = load void ()*, void ()** %2, align 8, !dbg !19
  %5 = bitcast void ()** %1 to i8*, !dbg !16
  call void @llvm.lifetime.start.p0i8(i64 8, i8* %5), !dbg !16
  store void ()* %4, void ()** %1, align 8, !dbg !16
  %6 = load void ()*, void ()** %1, align 8, !dbg !16
  call void %6(), !dbg !21
  %7 = bitcast void ()** %1 to i8*, !dbg !22
  call void @llvm.lifetime.end.p0i8(i64 8, i8* %7), !dbg !22
  br label %8, !dbg !23

8:                                                ; preds = %0
  ret void, !dbg !23
}

; Function Attrs: argmemonly nofree nosync nounwind willreturn
declare void @llvm.lifetime.start.p0i8(i64 immarg, i8* nocapture) #0

; Function Attrs: argmemonly nofree nosync nounwind willreturn
declare void @llvm.lifetime.end.p0i8(i64 immarg, i8* nocapture) #0

attributes #0 = { argmemonly nofree nosync nounwind willreturn }

продолжаем говнокодить компилятор аля TypeScript в нативный код. ну это как С компилятор только без тупо-уродо-* у имен переменных

1) компилим точно также как и до этого в постах
2) получаем результат

>> Hello World!
Hello World!

Запостил: ASD_77 ASD_77, (Updated )

Комментарии (10) RSS

Добавить комментарий

Семь раз отмерь — один отрежь, guest!

    А не использовать ли нам bbcode?


    8