@designliquido/llvm-bindings 2.0.0 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/.github/workflows/build.yml +2 -2
  2. package/CHANGELOG.md +1 -0
  3. package/CMakeLists.txt +2 -2
  4. package/README.md +1 -0
  5. package/cmake/LLVM.cmake +1 -1
  6. package/package.json +4 -6
  7. package/src/IR/Intrinsic.cpp +0 -1
  8. package/tests/IR/OpaquePointer.spec.ts +39 -0
  9. package/tests/IR/Type.spec.ts +24 -0
  10. package/tests/fixtures/add.spec.ts +24 -0
  11. package/tests/fixtures/attribute.spec.ts +27 -0
  12. package/tests/fixtures/bitcodeWriter.spec.ts +42 -0
  13. package/tests/fixtures/class.spec.ts +30 -0
  14. package/tests/fixtures/debugInfo.spec.ts +73 -0
  15. package/tests/fixtures/exception.spec.ts +42 -0
  16. package/tests/fixtures/fibonacci.spec.ts +36 -0
  17. package/tests/fixtures/gep.spec.ts +27 -0
  18. package/tests/fixtures/intrinsic.spec.ts +29 -0
  19. package/tests/fixtures/linker.spec.ts +30 -0
  20. package/tests/fixtures/str.spec.ts +14 -0
  21. package/tests/fixtures/switch.spec.ts +45 -0
  22. package/tests/fixtures/unary.spec.ts +44 -0
  23. package/tests/fixtures/variable.spec.ts +25 -0
  24. package/test/add.ts +0 -32
  25. package/test/attribute.ts +0 -37
  26. package/test/bitcodeWriter.ts +0 -44
  27. package/test/class.ts +0 -39
  28. package/test/debugInfo.ts +0 -181
  29. package/test/exception.ts +0 -57
  30. package/test/fibonacci.ts +0 -44
  31. package/test/gep.ts +0 -42
  32. package/test/index.ts +0 -33
  33. package/test/intrinsic.ts +0 -35
  34. package/test/linker.ts +0 -48
  35. package/test/str.ts +0 -19
  36. package/test/switch.ts +0 -58
  37. package/test/target.ts +0 -14
  38. package/test/type.ts +0 -21
  39. package/test/unary.ts +0 -53
  40. package/test/variable.ts +0 -37
  41. /package/{test → tests/fixtures}/bitcode/add.bc +0 -0
package/test/switch.ts DELETED
@@ -1,58 +0,0 @@
1
- import path from 'path';
2
- import llvm from '..';
3
-
4
- export default function testSwitch(): void {
5
- const filename = path.basename(__filename);
6
- const context = new llvm.LLVMContext();
7
- const module = new llvm.Module(filename, context);
8
- const builder = new llvm.IRBuilder(context);
9
-
10
- const returnType = builder.getInt32Ty();
11
- const paramTypes = [builder.getInt32Ty()];
12
- const functionType = llvm.FunctionType.get(returnType, paramTypes, false);
13
- const func = llvm.Function.Create(functionType, llvm.Function.LinkageTypes.ExternalLinkage, 'switch', module);
14
-
15
- const entryBB = llvm.BasicBlock.Create(context, 'entry', func);
16
- const case1BB = llvm.BasicBlock.Create(context, 'switch.case1', func);
17
- const case2BB = llvm.BasicBlock.Create(context, 'switch.case2', func);
18
- const defaultCaseBB = llvm.BasicBlock.Create(context, 'switch.default', func);
19
- const exitBB = llvm.BasicBlock.Create(context, 'switch.exit', func);
20
-
21
- // entry
22
- builder.SetInsertPoint(entryBB);
23
- const retPtr = builder.CreateAlloca(builder.getInt32Ty(), null, 'ret');
24
- const switchInst = builder.CreateSwitch(func.getArg(0), defaultCaseBB, 2);
25
- switchInst.addCase(builder.getInt32(1), case1BB);
26
- switchInst.addCase(builder.getInt32(2), case2BB);
27
-
28
- // switch.case1
29
- builder.SetInsertPoint(case1BB);
30
- builder.CreateStore(builder.getInt32(1), retPtr);
31
- builder.CreateBr(exitBB);
32
-
33
- // switch.case2
34
- builder.SetInsertPoint(case2BB);
35
- builder.CreateStore(builder.getInt32(2), retPtr);
36
- builder.CreateBr(exitBB);
37
-
38
- // switch.default
39
- builder.SetInsertPoint(defaultCaseBB);
40
- builder.CreateStore(builder.getInt32(3), retPtr);
41
- builder.CreateBr(exitBB);
42
-
43
- // switch.exit
44
- builder.SetInsertPoint(exitBB);
45
- const retVal = builder.CreateLoad(builder.getInt32Ty(), retPtr);
46
- builder.CreateRet(retVal);
47
-
48
- console.log(module.print());
49
-
50
- if (llvm.verifyFunction(func)) {
51
- console.error(`${filename}: verifying the 'switch' function failed`);
52
- process.exit(1);
53
- }
54
- if (llvm.verifyModule(module)) {
55
- console.error(`${filename}: verifying the module failed`);
56
- process.exit(1);
57
- }
58
- }
package/test/target.ts DELETED
@@ -1,14 +0,0 @@
1
- import llvm from '..';
2
-
3
- export default function testTarget(): void {
4
- llvm.InitializeAllTargetInfos();
5
- llvm.InitializeAllTargets();
6
- llvm.InitializeAllTargetMCs();
7
- llvm.InitializeAllAsmPrinters();
8
- llvm.InitializeAllAsmParsers();
9
- llvm.InitializeAllDisassemblers();
10
- llvm.InitializeNativeTarget();
11
- llvm.InitializeNativeTargetAsmPrinter();
12
- llvm.InitializeNativeTargetAsmParser();
13
- llvm.InitializeNativeTargetDisassembler();
14
- }
package/test/type.ts DELETED
@@ -1,21 +0,0 @@
1
- import { strict as assert } from 'assert';
2
- import llvm from '..';
3
-
4
- export default function testType() {
5
- const context = new llvm.LLVMContext();
6
- const type1 = llvm.Type.getInt32Ty(context);
7
- const type2 = llvm.IntegerType.get(context, 32);
8
- const type3 = llvm.Type.getInt8PtrTy(context);
9
- const type4 = llvm.PointerType.getUnqual(llvm.Type.getInt8Ty(context));
10
- const type5 = llvm.Type.getVoidTy(context);
11
- assert(llvm.Type.isSameType(type1, type2));
12
- assert(!llvm.Type.isSameType(type1, type3));
13
- assert(!llvm.Type.isSameType(type1, type4));
14
- assert(!llvm.Type.isSameType(type1, type5));
15
- assert(!llvm.Type.isSameType(type2, type3));
16
- assert(!llvm.Type.isSameType(type2, type4));
17
- assert(!llvm.Type.isSameType(type2, type5));
18
- assert(llvm.Type.isSameType(type3, type4));
19
- assert(!llvm.Type.isSameType(type3, type5));
20
- assert(!llvm.Type.isSameType(type4, type5));
21
- }
package/test/unary.ts DELETED
@@ -1,53 +0,0 @@
1
- import path from 'path';
2
- import llvm from '..';
3
-
4
- export default function testUnary(): void {
5
- const filename = path.basename(__filename);
6
- const context = new llvm.LLVMContext();
7
- const module = new llvm.Module(filename, context);
8
- const builder = new llvm.IRBuilder(context);
9
-
10
- const returnType = builder.getVoidTy();
11
- const functionType = llvm.FunctionType.get(returnType, false);
12
- const func = llvm.Function.Create(functionType, llvm.Function.LinkageTypes.ExternalLinkage, 'unary', module);
13
-
14
- const entryBB = llvm.BasicBlock.Create(context, 'entry', func);
15
- builder.SetInsertPoint(entryBB);
16
-
17
- const boolAlloca = builder.CreateAlloca(builder.getInt1Ty(), null, 'bool_alloca');
18
- builder.CreateStore(builder.getFalse(), boolAlloca);
19
- const boolValue = builder.CreateLoad(builder.getInt1Ty(), boolAlloca, 'bool_value');
20
- const notBoolValue = builder.CreateNot(boolValue, 'not_bool_value');
21
- builder.CreateStore(notBoolValue, boolAlloca);
22
-
23
- const flagAlloca = builder.CreateAlloca(builder.getInt64Ty(), null, 'flag_alloca');
24
- builder.CreateStore(builder.getInt64(123), flagAlloca);
25
- const flagValue = builder.CreateLoad(builder.getInt64Ty(), flagAlloca, 'flag_value');
26
- const notFlagValue = builder.CreateNot(flagValue, 'not_flag_value');
27
- builder.CreateStore(notFlagValue, flagAlloca);
28
-
29
- const integerAlloca = builder.CreateAlloca(builder.getInt64Ty(), null, 'integer_alloca');
30
- builder.CreateStore(builder.getInt64(233), integerAlloca);
31
- const integerValue = builder.CreateLoad(builder.getInt64Ty(), integerAlloca, 'integer_value');
32
- const negIntegerValue = builder.CreateNeg(integerValue, 'neg_integer_value');
33
- builder.CreateStore(negIntegerValue, integerAlloca);
34
-
35
- const floatAlloca = builder.CreateAlloca(builder.getDoubleTy(), null, 'float_alloca');
36
- builder.CreateStore(llvm.ConstantFP.get(builder.getDoubleTy(), 11.1), floatAlloca);
37
- const floatValue = builder.CreateLoad(builder.getDoubleTy(), floatAlloca, 'float_value');
38
- const negFloatValue = builder.CreateFNeg(floatValue, 'neg_float_value');
39
- builder.CreateStore(negFloatValue, floatAlloca);
40
-
41
- builder.CreateRetVoid()
42
-
43
- console.log(module.print());
44
-
45
- if (llvm.verifyFunction(func)) {
46
- console.error(`${filename}: verifying the 'unary' function failed`);
47
- process.exit(1);
48
- }
49
- if (llvm.verifyModule(module)) {
50
- console.error(`${filename}: verifying the module failed`);
51
- process.exit(1);
52
- }
53
- }
package/test/variable.ts DELETED
@@ -1,37 +0,0 @@
1
- import path from 'path';
2
- import llvm from '..';
3
-
4
- export default function testVariable(): void {
5
- const filename = path.basename(__filename);
6
- const context = new llvm.LLVMContext();
7
- const module = new llvm.Module(filename, context);
8
- const builder = new llvm.IRBuilder(context);
9
-
10
- const returnType = builder.getVoidTy();
11
- const functionType = llvm.FunctionType.get(returnType, false);
12
- const func = llvm.Function.Create(functionType, llvm.Function.LinkageTypes.ExternalLinkage, 'variable', module);
13
-
14
- const entryBB = llvm.BasicBlock.Create(context, 'entry', func);
15
- builder.SetInsertPoint(entryBB);
16
- const alloca = builder.CreateAlloca(builder.getInt32Ty(), null, 'a');
17
- builder.CreateStore(builder.getInt32(11), alloca);
18
-
19
- const value = builder.CreateLoad(builder.getInt32Ty(), alloca);
20
-
21
- const cond = builder.CreateICmpSGT(value, builder.getInt32(10), 'cond');
22
-
23
- builder.CreateSelect(cond, builder.getInt32(10), builder.getInt32(20));
24
-
25
- builder.CreateRetVoid();
26
-
27
- console.log(module.print());
28
-
29
- if (llvm.verifyFunction(func)) {
30
- console.error(`${filename}: 'verifying the 'variable' function failed`);
31
- process.exit(1);
32
- }
33
- if (llvm.verifyModule(module)) {
34
- console.error(`${filename}: verifying the module failed`);
35
- process.exit(1);
36
- }
37
- }
File without changes