- 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
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 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
make://google.com
make_install://google.com
фу фу фу
давай тогда писать псевдографическую игрушку на борланд c 3 под DOS?
А паскалю не с чем было совмещаться.
Библиотечные функции, объявленные в conio.h, весьма различались в зависимости от компилятора. Первоначально реализованные в Microsoft Visual C++ различные функции привязывались напрямую к нескольким первым функциям DOS, связанным с прерыванием 21h. Но библиотека, поставляемая с Turbo C++ и Borland C++, не использует DOS API, а вместо этого напрямую обращается к видеопамяти для вывода информации и использования сигналов прерывания BIOS.
люби и яйца лакать
так вроде уже яйца на колёса поменяли
а ты катись, колесо
в отличие, например, от перла