summaryrefslogtreecommitdiff
path: root/src/mono_opt.sml
diff options
context:
space:
mode:
authorGravatar Vladimir Shabanov <vshabanoff@gmail.com>2012-05-17 01:41:30 +0400
committerGravatar Vladimir Shabanov <vshabanoff@gmail.com>2012-05-17 01:41:30 +0400
commit4aeb721c42f6e7f52ff27b2a9b54b93e27f600ad (patch)
tree69e35cdb07513fe171381f55f1dd6141cd8557b6 /src/mono_opt.sml
parent3ffa0c777818ec5f00ec0617fa08ccba83b9cfe2 (diff)
Speed up space eating in MonoOpt
Diffstat (limited to 'src/mono_opt.sml')
-rw-r--r--src/mono_opt.sml33
1 files changed, 18 insertions, 15 deletions
diff --git a/src/mono_opt.sml b/src/mono_opt.sml
index 17d23cc2..70404c09 100644
--- a/src/mono_opt.sml
+++ b/src/mono_opt.sml
@@ -143,21 +143,24 @@ fun checkProperty s = size s > 0
fun exp e =
case e of
EPrim (Prim.String s) =>
- let
- val (_, chs) =
- CharVector.foldl (fn (ch, (lastSpace, chs)) =>
- let
- val isSpace = Char.isSpace ch
- in
- if isSpace andalso lastSpace then
- (true, chs)
- else
- (isSpace, ch :: chs)
- end)
- (false, []) s
- in
- EPrim (Prim.String (String.implode (rev chs)))
- end
+ if CharVector.exists Char.isSpace s then
+ let
+ val (_, chs) =
+ CharVector.foldl (fn (ch, (lastSpace, chs)) =>
+ let
+ val isSpace = Char.isSpace ch
+ in
+ if isSpace andalso lastSpace then
+ (true, chs)
+ else
+ (isSpace, ch :: chs)
+ end)
+ (false, []) s
+ in
+ EPrim (Prim.String (String.implode (rev chs)))
+ end
+ else
+ e
| EFfiApp ("Basis", "strcat", [(e1, _), (e2, _)]) => exp (EStrcat (e1, e2))