Skip to content

Commit 2129edb

Browse files
committed
use big_s::S;
1 parent a4c93d6 commit 2129edb

File tree

4 files changed

+32
-22
lines changed

4 files changed

+32
-22
lines changed

Cargo.lock

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,5 @@ clap = "2.33.1"
1212
serde_json = "1.0.57"
1313
bimap = "0.5.2"
1414
position = "0.0.3"
15-
bimap_plus_map = "0.1.1"
15+
bimap_plus_map = "0.1.1"
16+
big_s = "1.0.2"

src/compile/mod.rs

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use crate::identbimap;
22
use crate::lex;
33
use crate::parse;
4+
use big_s::S;
45

56
type Line = (usize, String);
67

@@ -19,19 +20,19 @@ fn compile_optional_literal(
1920
) -> String {
2021
match lit {
2122
None => match default_type {
22-
lex::Type::Shu4 => "0.0".to_string(),
23-
lex::Type::Lie4 => "vec![]".to_string(),
24-
lex::Type::Yan2 => "\"\"".to_string(),
25-
lex::Type::Yao2 => "false".to_string(),
23+
lex::Type::Shu4 => S("0.0"),
24+
lex::Type::Lie4 => S("vec![]"),
25+
lex::Type::Yan2 => S("\"\""),
26+
lex::Type::Yao2 => S("false"),
2627
},
2728
Some(v) => compile_literal(&env, v),
2829
}
2930
}
3031

3132
fn compile_literal(env: &Env, v: &parse::Data) -> String {
3233
match v.clone() {
33-
parse::Data::BoolValue(true) => "true".to_string(),
34-
parse::Data::BoolValue(false) => "false".to_string(),
34+
parse::Data::BoolValue(true) => S("true"),
35+
parse::Data::BoolValue(false) => S("false"),
3536
parse::Data::Identifier(ident) => env.ident_map.translate_from_hanzi(&ident),
3637
parse::Data::IntNum(intnum) => format!("{}.0", intnum),
3738
parse::Data::StringLiteral(strlit) => format!("\"{}\"", strlit), // FIXME properly escape
@@ -126,7 +127,7 @@ fn compile_forenum(mut env: &mut Env, num: i64, statements: &[parse::Statement])
126127
r.append(&mut compile_statement(&mut env, &st));
127128
}
128129
env.indent_level -= 1;
129-
r.push((env.indent_level, "}".to_string()));
130+
r.push((env.indent_level, S("}")));
130131
r
131132
}
132133

@@ -136,7 +137,7 @@ fn compile_dataorqi2(env: &mut Env, a: &parse::OrQi2<parse::Data>) -> String {
136137
let qi = env
137138
.variables_not_yet_named
138139
.last()
139-
.unwrap_or(&"f64::NAN".to_string())
140+
.unwrap_or(&S("f64::NAN"))
140141
.to_string();
141142

142143
//《文言陰符》曰『言「其」者。取至近之魚而棄其餘。』
@@ -384,10 +385,10 @@ fn compile_if(
384385
}
385386

386387
if !elsecase.is_empty() {
387-
r.push((env.indent_level, "} else {".to_string()));
388+
r.push((env.indent_level, S("} else {")));
388389
compile_indent(&mut env, &mut r, &elsecase)
389390
}
390-
r.push((env.indent_level, "}".to_string()));
391+
r.push((env.indent_level, S("}")));
391392
r
392393
}
393394

@@ -416,8 +417,8 @@ fn compile_statement(mut env: &mut Env, st: &parse::Statement) -> Vec<Line> {
416417
.join(", ")
417418
),
418419
)],
419-
parse::Statement::Continue => vec![(env.indent_level, "continue;".to_string())],
420-
parse::Statement::Break => vec![(env.indent_level, "break;".to_string())],
420+
parse::Statement::Continue => vec![(env.indent_level, S("continue;"))],
421+
parse::Statement::Break => vec![(env.indent_level, S("break;"))],
421422
parse::Statement::ArrayFill {
422423
what_to_fill: parse::OrQi2::NotQi2(ident),
423424
elems,
@@ -540,7 +541,7 @@ fn compile_statement(mut env: &mut Env, st: &parse::Statement) -> Vec<Line> {
540541
),
541542
)];
542543
compile_indent(&mut env, &mut r, &stmts);
543-
r.push((env.indent_level, "}".to_string()));
544+
r.push((env.indent_level, S("}")));
544545
r
545546
}
546547
parse::Statement::Loop { statements } => compile_loop(&mut env, statements),
@@ -617,21 +618,21 @@ fn compile_forenum_ident(
617618
compile_indent(&mut env, &mut r, statements);
618619
r.append(&mut vec![
619620
(env.indent_level + 1, format!("_rand{} += 1.0;", rand_n,)),
620-
(env.indent_level, "}".to_string()),
621+
(env.indent_level, S("}")),
621622
]);
622623
r
623624
}
624625

625626
fn compile_loop(mut env: &mut Env, statements: &[parse::Statement]) -> Vec<Line> {
626-
let mut r = vec![(env.indent_level, "loop {".to_string())];
627+
let mut r = vec![(env.indent_level, S("loop {"))];
627628
compile_indent(&mut env, &mut r, statements);
628-
r.push((env.indent_level, "}".to_string()));
629+
r.push((env.indent_level, S("}")));
629630
r
630631
}
631632

632633
use std::collections::HashMap;
633634
pub fn compile(parsed: &[parse::Statement], conversion_table: &HashMap<String, String>) -> String {
634-
let mut ans = vec![(0, "fn main() {".to_string())];
635+
let mut ans = vec![(0, S("fn main() {"))];
635636
let mut env = Env {
636637
ans_counter: 0,
637638
rand_counter: 0,
@@ -644,7 +645,7 @@ pub fn compile(parsed: &[parse::Statement], conversion_table: &HashMap<String, S
644645
ans.append(&mut compile_statement(&mut env, &st));
645646
}
646647

647-
ans.push((0, "}".to_string()));
648+
ans.push((0, S("}")));
648649

649650
ans.iter()
650651
.map(|(indent, src)| format!("{}{}\n", " ".repeat(*indent), src))

src/identbimap/mod.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use crate::parse;
2-
use std::collections::HashMap;
2+
use big_s::S;
33
use bimap_plus_map::BiMapPlusMap;
4+
use std::collections::HashMap;
45

56
type Table = HashMap<String, String>;
67

@@ -9,7 +10,7 @@ fn to_pinyin(ident: parse::Identifier, conversion_table: &Table) -> String {
910
let vec = i
1011
.chars()
1112
.map(|c| match conversion_table.get(&format!("{:X}", c as u32)) {
12-
None => "_".to_string(),
13+
None => S("_"),
1314
Some(a) => a.split(' ').collect::<Vec<_>>()[0].to_string(),
1415
})
1516
.collect::<Vec<_>>();
@@ -21,7 +22,7 @@ type Ascii = String;
2122

2223
#[derive(Debug, Clone, PartialEq, Eq)]
2324
pub enum Type {
24-
Mutable
25+
Mutable,
2526
}
2627

2728
pub struct IdentBiMap(BiMapPlusMap<Hanzi, Ascii, Option<Type>>);

0 commit comments

Comments
 (0)