Skip to content

Commit 9ca1504

Browse files
authored
Merge pull request #2020 from andrew-johnson-4/more-misc-optimizations-fklewfji
More misc optimizations fklewfji
2 parents 47d8542 + b05ef25 commit 9ca1504

File tree

6 files changed

+3462
-3423
lines changed

6 files changed

+3462
-3423
lines changed

BOOTSTRAP/cli.c

Lines changed: 3388 additions & 3370 deletions
Large diffs are not rendered by default.
Lines changed: 28 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,39 @@
11

2-
let escape-string(s: CString): CString = (
3-
let e = SNil;
4-
while head(s) != 0 {
5-
if head(s) == 92 {
6-
s = tail(s);
7-
match head(s) {
8-
58 => e = e + SAtom(c";"); # \: -> ;
9-
91 => e = e + SAtom(c"("); # \[ -> (
10-
92 => e = e + SAtom(c"\\"); # \\ -> \
11-
93 => e = e + SAtom(c")"); # \] -> )
12-
96 => e = e + SAtom(c"'"); # \` -> '
13-
110 => e = e + SAtom(c"\n"); # \n -> [newline]
14-
111 => e = e + SAtom(c"#"); # \o -> #
15-
116 => e = e + SAtom(c"\t"); # \t -> [tab]
16-
115 => e = e + SAtom(c" "); # \s -> [space]
2+
let escape-string(out: Vector<U8>, s: String): Vector<U8> = (
3+
let oi = 0_sz;
4+
while oi < s.length {
5+
if s[oi] == 92 {
6+
oi = oi + 1;
7+
match s[oi] {
8+
58 => out = out.push(c";"); # \: -> ;
9+
91 => out = out.push(c"("); # \[ -> (
10+
92 => out = out.push(c"\\"); # \\ -> \
11+
93 => out = out.push(c")"); # \] -> )
12+
96 => out = out.push(c"'"); # \` -> '
13+
110 => out = out.push(c"\n"); # \n -> [newline]
14+
111 => out = out.push(c"#"); # \o -> #
15+
116 => out = out.push(c"\t"); # \t -> [tab]
16+
115 => out = out.push(c" "); # \s -> [space]
1717
c => fail("Illegal Escape Sequence In String: \{c}\n");
1818
};
19-
s = tail(s);
2019
} else {
21-
e = e + SAtom(clone-rope(head(s)));
22-
s = tail(s);
23-
}
20+
out = out.push(s[oi]);
21+
};
22+
oi = oi + 1;
2423
};
25-
clone-rope(e)
24+
out
2625
);
2726

28-
let escape-string(s: S): S = (
27+
let escape-string(out: Vector<U8>, s: S): Vector<U8> = (
2928
match s {
30-
SAtom{atom=atom} => SAtom(escape-string(atom.into(type(CString))));
31-
SCons{left=left, right=right} => escape-string(left) + escape-string(right);
32-
_ => SNil;
29+
SAtom{atom=atom} => escape-string(out, atom);
30+
SCons{left=left, right=right} => escape-string(escape-string(out,left),right);
31+
_ => out;
3332
}
3433
);
3534

35+
let escape-string(s: S): S = (
36+
let out = mk-vector(type(U8));
37+
out = escape-string(out, s);
38+
SAtom(out.buffer-into-cstring)
39+
);

PLUGINS/BACKEND/C/mangle-identifier.lsts

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,35 @@
11

22
let mangle-identifier(k: CString): S = (
3-
let cs = SAtom(c"LM_");
3+
let cs = mk-vector(type(U8)); cs = cs.push(c"LM_");
44
while head(k) != 0 { match head(k) {
5-
33 => cs = cs + SAtom(c"_EX_"); # !
6-
36 => cs = cs + SAtom(c"_DL_"); # $
7-
37 => cs = cs + SAtom(c"_MD_"); # %
8-
38 => cs = cs + SAtom(c"_AM_"); # &
9-
39 => cs = cs + SAtom(c"_SQ_"); # '
10-
42 => cs = cs + SAtom(c"_ML_"); # *
11-
43 => cs = cs + SAtom(c"_AD_"); # +
12-
44 => cs = cs + SAtom(c"_CM_"); # ,
13-
45 => cs = cs + SAtom(c"_SB_"); # -
14-
46 => cs = cs + SAtom(c"_DT_"); # .
15-
47 => cs = cs + SAtom(c"_DV_"); # /
16-
58 => cs = cs + SAtom(c"_CL_"); # :
17-
59 => cs = cs + SAtom(c"_SC_"); # ;
18-
60 => cs = cs + SAtom(c"_LT_"); # <
19-
61 => cs = cs + SAtom(c"_EQ_"); # =
20-
62 => cs = cs + SAtom(c"_GT_"); # >
21-
63 => cs = cs + SAtom(c"_QM_"); # ?
22-
64 => cs = cs + SAtom(c"_AT_"); # @
23-
91 => cs = cs + SAtom(c"_LB_"); # [
24-
93 => cs = cs + SAtom(c"_RB_"); # ]
25-
94 => cs = cs + SAtom(c"_HT_"); # ^
26-
95 => cs = cs + SAtom(c"_US_"); # _
27-
96 => cs = cs + SAtom(c"_TK_"); # `
28-
124 => cs = cs + SAtom(c"_BR_"); # |
29-
126 => cs = cs + SAtom(c"_TL_"); # ~
30-
c => cs = cs + SAtom(clone-rope(c));
5+
33 => cs = cs.push(c"_EX_"); # !
6+
36 => cs = cs.push(c"_DL_"); # $
7+
37 => cs = cs.push(c"_MD_"); # %
8+
38 => cs = cs.push(c"_AM_"); # &
9+
39 => cs = cs.push(c"_SQ_"); # '
10+
42 => cs = cs.push(c"_ML_"); # *
11+
43 => cs = cs.push(c"_AD_"); # +
12+
44 => cs = cs.push(c"_CM_"); # ,
13+
45 => cs = cs.push(c"_SB_"); # -
14+
46 => cs = cs.push(c"_DT_"); # .
15+
47 => cs = cs.push(c"_DV_"); # /
16+
58 => cs = cs.push(c"_CL_"); # :
17+
59 => cs = cs.push(c"_SC_"); # ;
18+
60 => cs = cs.push(c"_LT_"); # <
19+
61 => cs = cs.push(c"_EQ_"); # =
20+
62 => cs = cs.push(c"_GT_"); # >
21+
63 => cs = cs.push(c"_QM_"); # ?
22+
64 => cs = cs.push(c"_AT_"); # @
23+
91 => cs = cs.push(c"_LB_"); # [
24+
93 => cs = cs.push(c"_RB_"); # ]
25+
94 => cs = cs.push(c"_HT_"); # ^
26+
95 => cs = cs.push(c"_US_"); # _
27+
96 => cs = cs.push(c"_TK_"); # `
28+
124 => cs = cs.push(c"_BR_"); # |
29+
126 => cs = cs.push(c"_TL_"); # ~
30+
c => cs = cs.push(c);
3131
}; k = tail(k); };
32-
cs
32+
SAtom(cs.buffer-into-string)
3333
);
3434

3535
let mangle-identifier(kt: Type): S = (

SRC/backend-mk-expression.lsts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11

22
let mk-expression(val: CString): Fragment = (
3-
mk-fragment().set(c"expression", SAtom(val))
3+
mk-fragment().set(c"expression", SAtom(val.into(type(String))))
44
);
55

66
let mk-expression(val: S): Fragment = (

lib/core/vector.lsts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,23 @@ let .push(v: Vector<t>, i: t): Vector<t>+MustUse = (
103103
v
104104
);
105105

106+
let .push(v: Vector<U8>, i: CString): Vector<U8>+MustUse = (
107+
while non-zero(i) {
108+
v = v.push(head(i));
109+
i = tail(i);
110+
};
111+
v
112+
);
113+
114+
let .push(v: Vector<U8>, i: String): Vector<U8>+MustUse = (
115+
let ii = 0_sz;
116+
while ii < i.length {
117+
v = v.push(i[ii]);
118+
ii = ii + 1;
119+
};
120+
v
121+
);
122+
106123
# Note: this *reduces* the size of the vector, so it *never* resizes
107124
# There is no need to return the original vector because it never gets modified
108125
let .pop(v: Vector<t>): t = (

tests/promises/lm-typecheck/tc-misc-2-target.lsts.skip

Whitespace-only changes.

0 commit comments

Comments
 (0)