|
1 | | -use std::borrow::Cow; |
| 1 | +use std::borrow::{Borrow, Cow}; |
2 | 2 | use std::ops::Deref; |
3 | 3 | use std::{iter, ptr}; |
4 | 4 |
|
@@ -38,28 +38,37 @@ use crate::type_of::LayoutLlvmExt; |
38 | 38 | use crate::value::Value; |
39 | 39 |
|
40 | 40 | // All Builders must have an llfn associated with them |
41 | | -#[must_use] |
42 | | -pub(crate) struct SBuilder<'a, 'll> { |
43 | | - pub llbuilder: &'ll mut llvm::Builder<'ll>, |
44 | | - pub cx: &'a SimpleCx<'ll>, |
45 | | -} |
46 | | - |
47 | | -impl Drop for SBuilder<'_, '_> { |
48 | | - fn drop(&mut self) { |
49 | | - unsafe { |
50 | | - llvm::LLVMDisposeBuilder(&mut *(self.llbuilder as *mut _)); |
51 | | - } |
52 | | - } |
53 | | -} |
| 41 | +//#[must_use] |
| 42 | +//pub(crate) struct SBuilder<'a, 'll> { |
| 43 | +// pub llbuilder: &'ll mut llvm::Builder<'ll>, |
| 44 | +// pub cx: &'a SimpleCx<'ll>, |
| 45 | +//} |
| 46 | + |
| 47 | +pub(crate) type SBuilder<'a, 'll> = GenericBuilder<'a, 'll, SimpleCx<'ll>>; |
| 48 | + |
| 49 | +//impl Drop for SBuilder<'_, '_> { |
| 50 | +// fn drop(&mut self) { |
| 51 | +// unsafe { |
| 52 | +// llvm::LLVMDisposeBuilder(&mut *(self.llbuilder as *mut _)); |
| 53 | +// } |
| 54 | +// } |
| 55 | +//} |
54 | 56 |
|
55 | 57 | // All Builders must have an llfn associated with them |
56 | 58 | #[must_use] |
57 | | -pub(crate) struct Builder<'a, 'll, 'tcx> { |
| 59 | +//pub(crate) struct Builder<'a, 'll, 'tcx> { |
| 60 | +// pub llbuilder: &'ll mut llvm::Builder<'ll>, |
| 61 | +// pub cx: &'a CodegenCx<'ll, 'tcx>, |
| 62 | +//} |
| 63 | +// |
| 64 | +pub(crate) struct GenericBuilder<'a, 'll, CX: Borrow<SimpleCx<'ll>>> { |
58 | 65 | pub llbuilder: &'ll mut llvm::Builder<'ll>, |
59 | | - pub cx: &'a CodegenCx<'ll, 'tcx>, |
| 66 | + pub cx: &'a CX, |
60 | 67 | } |
61 | 68 |
|
62 | | -impl Drop for Builder<'_, '_, '_> { |
| 69 | +pub(crate) type Builder<'a, 'll, 'tcx> = GenericBuilder<'a, 'll, CodegenCx<'ll, 'tcx>>; |
| 70 | + |
| 71 | +impl<'a, 'll, CX: Borrow<SimpleCx<'ll>>> Drop for GenericBuilder<'a, 'll, CX> { |
63 | 72 | fn drop(&mut self) { |
64 | 73 | unsafe { |
65 | 74 | llvm::LLVMDisposeBuilder(&mut *(self.llbuilder as *mut _)); |
@@ -269,7 +278,8 @@ macro_rules! set_math_builder_methods { |
269 | 278 | } |
270 | 279 | } |
271 | 280 |
|
272 | | -impl<'a, 'll, 'tcx> BuilderMethods<'a, 'tcx> for Builder<'a, 'll, 'tcx> { |
| 281 | +//impl<'a, 'll, 'tcx> BuilderMethods<'a, 'tcx> for Builder<'a, 'll, 'tcx> { |
| 282 | +impl<'a, 'll, 'tcx> BuilderMethods<'a, 'tcx> for GenericBuilder<'a, 'll, CodegenCx<'ll, 'tcx>> { |
273 | 283 | type CodegenCx = CodegenCx<'ll, 'tcx>; |
274 | 284 |
|
275 | 285 | fn build(cx: &'a CodegenCx<'ll, 'tcx>, llbb: &'ll BasicBlock) -> Self { |
|
0 commit comments