Skip to content

Commit b21c2fc

Browse files
committed
Use bytes insteaf of script in parse_if
1 parent a682420 commit b21c2fc

File tree

3 files changed

+33
-13
lines changed

3 files changed

+33
-13
lines changed

src/generate.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ fn generate_escape(builder: TokenStream, expression: TokenStream, span: Span) ->
5151
#[allow(clippy::all)]
5252

5353
use ::bitcoin::blockdata::script::Builder;
54-
fn push(builder: Builder, value: impl pushable::Pushable) -> Builder {
54+
fn push<T: pushable::Pushable>(builder: Builder, value: T) -> Builder {
5555
value.bitcoin_script_push(builder)
5656
}
5757
push(builder, value)

src/parse.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -110,9 +110,9 @@ where
110110
let inner_block = block.stream();
111111
escape.extend(quote! {
112112
{
113-
script_var.push(script! {
113+
script_var.extend_from_slice(script! {
114114
#inner_block
115-
});
115+
}.as_bytes());
116116
}
117117
});
118118

@@ -130,7 +130,7 @@ where
130130
escape = quote! {
131131
{
132132
#escape;
133-
script_var
133+
bitcoin::script::ScriptBuf::from(script_var)
134134
}
135135
}
136136
.into();
@@ -152,9 +152,9 @@ where
152152
let inner_block = block.stream();
153153
escape.extend(quote! {
154154
{
155-
script_var.extend_from_slice(script !{
156-
#inner_block
157-
}.as_bytes());
155+
script_var.extend_from_slice(script !{
156+
#inner_block
157+
}.as_bytes());
158158
}
159159
bitcoin::script::ScriptBuf::from(script_var)
160160
});

tests/test.rs

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -143,28 +143,48 @@ fn test_if() {
143143
}
144144

145145
#[test]
146-
fn test_performance() {
146+
fn test_performance_loop() {
147147
define_pushable! {};
148148
let loop_script = script! {
149149
OP_ADD
150+
OP_ADD
151+
OP_ADD
150152
};
151153

152154
let script = script! {
153-
for _ in 0..20_000 {
155+
for _ in 0..5_000_000 {
154156
{ loop_script.clone() }
155157
}
156158
};
157159

158-
assert_eq!(script.as_bytes()[0], 147)
160+
assert_eq!(script.as_bytes()[5_000_000 - 1], 147)
159161
}
160162

161163
#[test]
162164
fn test_performance_no_macro() {
163165
let mut builder = bitcoin::script::Builder::new();
164-
for _ in 0..20_000 {
166+
for _ in 0..40_000_000 {
165167
builder = builder.push_opcode(OP_ADD);
166168
}
167-
169+
168170
let script = builder.as_script();
169-
assert_eq!(script.as_bytes()[0], 147);
171+
assert_eq!(script.as_bytes()[40_000_000 - 1], 147);
172+
}
173+
174+
#[test]
175+
fn test_performance_if() {
176+
define_pushable! {};
177+
178+
let script = script! {
179+
for _ in 0..5_000_000 {
180+
if true {
181+
OP_ADD
182+
OP_ADD
183+
} else {
184+
OP_ADD
185+
}
186+
}
187+
};
188+
189+
assert_eq!(script.as_bytes()[5_000_000 - 1], 147)
170190
}

0 commit comments

Comments
 (0)