Skip to content

Commit e2f91f9

Browse files
authored
Merge pull request #11 from ratel-rust/test-n-benches
No Rust CLI, added benchmarks
2 parents 172ba62 + 086346c commit e2f91f9

File tree

8 files changed

+159
-164
lines changed

8 files changed

+159
-164
lines changed

core/Cargo.toml

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,8 @@
11
[package]
22
name = "ratel"
3-
version = "0.3.0"
3+
version = "0.4.0"
44
authors = ["Maciej Hirsz <[email protected]>"]
55
license = "MIT"
66
description = "JavaScript transpiler in Rust"
77
repository = "https://github.com/ratel-rust/ratel-core"
88
documentation = "https://github.com/ratel-rust/ratel-core"
9-
10-
[profile.release]
11-
panic = "abort"
12-
13-
[dependencies]
14-
docopt = "0.6.78"
15-
rustc-serialize = "0.3.16"
16-
itoa = "0.1.1"

core/README.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# the `ratel` crate
2+
3+
## Test:
4+
5+
```
6+
cargo test
7+
```
8+
9+
## Benchmark:
10+
11+
```
12+
cargo bench
13+
```
14+
15+
Benchmarks require a nightly version of Rust to work.

core/benches/colors.rs

Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
1+
#![feature(test)]
2+
3+
extern crate test;
4+
extern crate ratel;
5+
6+
use test::Bencher;
7+
8+
static SOURCE: &'static str = r#"
9+
10+
'use strict';
11+
12+
/**
13+
* Extranct red color out of a color integer:
14+
*
15+
* 0x00DEAD -> 0x00
16+
*
17+
* @param {Number} color
18+
* @return {Number}
19+
*/
20+
function red( color )
21+
{
22+
let foo = 3.14;
23+
return color >> 16;
24+
}
25+
26+
/**
27+
* Extranct red color out of a color integer:
28+
*
29+
* 0x00DEAD -> 0xDE
30+
*
31+
* @param {Number} color
32+
* @return {Number}
33+
*/
34+
function green( color )
35+
{
36+
return ( color >> 8 ) & 0xFF;
37+
}
38+
39+
40+
/**
41+
* Extranct red color out of a color integer:
42+
*
43+
* 0x00DEAD -> 0xAD
44+
*
45+
* @param {Number} color
46+
* @return {Number}
47+
*/
48+
function blue( color )
49+
{
50+
return color & 0xFF;
51+
}
52+
53+
54+
/**
55+
* Converts an integer containing a color such as 0x00DEAD to a hex
56+
* string, such as '#00DEAD';
57+
*
58+
* @param {Number} int
59+
* @return {String}
60+
*/
61+
function intToHex( int )
62+
{
63+
const mask = '#000000';
64+
65+
const hex = int.toString( 16 );
66+
67+
return mask.substring( 0, 7 - hex.length ) + hex;
68+
}
69+
70+
71+
/**
72+
* Converts a hex string containing a color such as '#00DEAD' to
73+
* an integer, such as 0x00DEAD;
74+
*
75+
* @param {Number} num
76+
* @return {String}
77+
*/
78+
function hexToInt( hex )
79+
{
80+
return parseInt( hex.substring( 1 ), 16 );
81+
}
82+
83+
module.exports = {
84+
red,
85+
green,
86+
blue,
87+
intToHex,
88+
hexToInt,
89+
};
90+
91+
"#;
92+
93+
#[bench]
94+
fn parse_to_ast(b: &mut Bencher) {
95+
b.bytes = SOURCE.len() as u64;
96+
97+
b.iter(|| {
98+
let ast = ratel::parser::parse(SOURCE.to_owned()).expect("Must parse");
99+
100+
ast
101+
});
102+
}
103+
104+
105+
#[bench]
106+
fn parse_to_ast_and_transform_es5(b: &mut Bencher) {
107+
b.bytes = SOURCE.len() as u64;
108+
109+
b.iter(|| {
110+
let mut ast = ratel::parser::parse(SOURCE.to_owned()).expect("Must parse");
111+
112+
let settings = ratel::transformer::Settings::target_es5();
113+
114+
ratel::transformer::transform(&mut ast, settings);
115+
116+
ast
117+
});
118+
}
119+
120+
#[bench]
121+
fn codegen_from_ast(b: &mut Bencher) {
122+
let mut ast = ratel::parser::parse(SOURCE.to_owned()).expect("Must parse");
123+
124+
let settings = ratel::transformer::Settings::target_es5();
125+
126+
ratel::transformer::transform(&mut ast, settings);
127+
128+
let output = ratel::codegen::generate_code(&ast, true);
129+
130+
b.bytes = output.len() as u64;
131+
132+
b.iter(|| {
133+
ratel::codegen::generate_code(&ast, true)
134+
});
135+
}

core/src/codegen.rs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
1-
extern crate itoa;
2-
31
use std::ptr;
2+
use std::io::Write;
43

54
use grammar::*;
65
use grammar::OperatorType::*;
@@ -129,7 +128,7 @@ trait Code {
129128
impl Code for u64 {
130129
#[inline]
131130
fn to_code(&self, gen: &mut Generator) {
132-
itoa::write(&mut gen.code, *self).expect("Can't fail on a Vec");
131+
write!(&mut gen.code, "{}", *self).expect("Can't fail on a Vec");
133132
}
134133
}
135134

@@ -716,11 +715,11 @@ impl Code for Statement {
716715
}
717716
}
718717

719-
pub fn generate_code(program: Program, minify: bool) -> String {
718+
pub fn generate_code(program: &Program, minify: bool) -> String {
720719
let mut gen = Generator::new(minify);
721720

722-
for statement in program.body {
723-
gen.write(&statement);
721+
for statement in &program.body {
722+
gen.write(statement);
724723
gen.new_line();
725724
}
726725

core/src/main.rs

Lines changed: 0 additions & 147 deletions
This file was deleted.

core/tests/codegen.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ pub use ratel::grammar::OperatorType::*;
88
fn output_program(input_program: &str) -> String {
99
let mut ast = parser::parse(input_program.to_string()).expect("Must compile");
1010
transformer::transform(&mut ast, transformer::Settings::target_es5());
11-
codegen::generate_code(ast, true)
11+
codegen::generate_code(&ast, true)
1212
}
1313

1414
macro_rules! assert_compile {

ffi/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
npm-debug.log
12
Cargo.lock
23
native/target
34
native/index.node

ffi/native/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ fn transform(call: Call) -> JsResult<JsString> {
2626
};
2727

2828
transformer::transform(&mut ast, transformer::Settings::target_es5());
29-
let out = codegen::generate_code(ast, minify.value());
29+
let out = codegen::generate_code(&ast, minify.value());
3030

3131
Ok(JsString::new(scope, &out).unwrap())
3232
}

0 commit comments

Comments
 (0)