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

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
function main()
{
	f1();
}

function f1(a = 10)
{    
    return a;
}

// code for 1

module @"1.ts"  {
  func @main() {
    %c0_i32 = constant 0 : i32
    %0 = typescript.undef : i32
    %1 = call @f1(%c0_i32, %0) : (i32, i32) -> i32
    return
  }
  func private @f1(%arg0: i32, %arg1: i32) -> i32 attributes {OptionalFrom = 1 : i8} {
    %c10_i32 = constant 10 : i32
    %c1_i32 = constant 1 : i32
    %0 = alloca() : memref<i32>
    %1 = cmpi ult, %arg0, %c1_i32 : i32
    %2 = scf.if %1 -> (i32) {
      scf.yield %c10_i32 : i32
    } else {
      scf.yield %arg1 : i32
    }
    store %2, %0[] : memref<i32>
    %3 = load %0[] : memref<i32>
    return %3 : i32
  }
}

// code for 2

; 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"

declare i8* @malloc(i64)

declare void @free(i8*)

define void @main() !dbg !3 {
  %1 = call i32 @f1(i32 0, i32 undef), !dbg !7
  ret void, !dbg !9
}

define i32 @f1(i32 %0, i32 %1) !dbg !10 {
  %3 = alloca i32, i64 ptrtoint (i32* getelementptr (i32, i32* null, i64 1) to i64), align 4, !dbg !11
  %4 = insertvalue { i32*, i32*, i64 } undef, i32* %3, 0, !dbg !11
  %5 = insertvalue { i32*, i32*, i64 } %4, i32* %3, 1, !dbg !11
  %6 = insertvalue { i32*, i32*, i64 } %5, i64 0, 2, !dbg !11
  %7 = icmp ult i32 %0, 1, !dbg !11
  br i1 %7, label %8, label %9, !dbg !11

8:                                                ; preds = %2
  br label %10, !dbg !11

9:                                                ; preds = %2
  br label %10, !dbg !11

10:                                               ; preds = %8, %9
  %11 = phi i32 [ %1, %9 ], [ 10, %8 ]
  br label %12, !dbg !11

12:                                               ; preds = %10
  %13 = extractvalue { i32*, i32*, i64 } %6, 1, !dbg !11
  store i32 %11, i32* %13, align 4, !dbg !11
  %14 = extractvalue { i32*, i32*, i64 } %6, 1, !dbg !11
  %15 = load i32, i32* %14, align 4, !dbg !11
  ret i32 %15, !dbg !13
}

История о том как я компайлер писал. (предисторию знают думаю все). Посмотрите на код и сравните с ужасным кодом на С. Это простенький javascript который тоже може быть скомпиленным в исполняемый год. а что для этого надо. просто несколько шагов.

1) компилим код через чудо компилятор tsc.exe --emit=mlir-affine c:\1.ts



а дальше может получить LLVM IL который можно компилировать

2) компилим код через чудо компилятор tsc.exe --emit=mlir-llvm c:\1.ts



а далее компилим код

llc.exe --filetype=obj -o=out.o 1.ll


запускаем a.exe

и оно работает :)

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

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

  • пили уже пуллреквест в хром блядь! пусть сайты компилятся прямо у пользователя и больше не тормозят
    Ответить
    • Кстати, HTML и CSS в LLVM уже научились конпелять? Чтобы быстрее лейауты раскидывало по экрану и стили вычисляло.
      Ответить
      • помоему angular 10 уже такое делает только на жабаскрипте
        Ответить
        • Пока меня не было, я слушал песни болгарских исполнителей.
          Ответить
            • любишь конио?
              давай тогда писать псевдографическую игрушку на борланд c 3 под DOS?
              Ответить
                      • Совместимость с конпелятором от M$ походу.

                        А паскалю не с чем было совмещаться.
                        Ответить
                        • лол

                          Библиотечные функции, объявленные в conio.h, весьма различались в зависимости от компилятора. Первоначально реализованные в Microsoft Visual C++ различные функции привязывались напрямую к нескольким первым функциям DOS, связанным с прерыванием 21h. Но библиотека, поставляемая с Turbo C++ и Borland C++, не использует DOS API, а вместо этого напрямую обращается к видеопамяти для вывода информации и использования сигналов прерывания BIOS.
                          Ответить
                • в смысле голосовать за python eggs?
                  так вроде уже яйца на колёса поменяли

                  а ты катись, колесо
                  Ответить
                  • люблю пистон за возможность сделать одно и то же примерно дюжиной разных способов
                    Ответить
    • Как ты конпелируешь неконпелируемое? Или как в пашко-пхп, все такие конструкции просто запрещены?
      Ответить
      • пока сделаю по минимуму. компилить будет только то где тип данных может быть определен. а дальше если не надоест то расширю на динамические данные. вообще я пишу для TypeScript-а а не чистую жабу
        Ответить

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

Из-за тебя ушел bormand, guest!

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


    8