]> git.donarmstrong.com Git - lilypond.git/commitdiff
lilypond-1.5.14
authorfred <fred>
Wed, 27 Mar 2002 02:03:15 +0000 (02:03 +0000)
committerfred <fred>
Wed, 27 Mar 2002 02:03:15 +0000 (02:03 +0000)
lily/include/lily-guile.hh

index 65ca5ebb2d392ad8755c805c3e1856b868a069f4..f49e505447109bd0f439e5334392e8f077e5a116 100644 (file)
@@ -73,7 +73,27 @@ SCM ly_last (SCM list);
 SCM ly_str02scm (char const*c);
 SCM ly_write2scm (SCM s);
 SCM ly_deep_copy (SCM);
-SCM ly_symbol2scm (char const *);
+
+#ifdef CACHE_SYMBOLS
+/*
+  Using this trick we cache the value of gh_symbol2scm ("fooo") where
+  "fooo" is a constant string. This is done at the cost of one static
+  variable per ly_symbol2scm() use, and one boolean evaluation for
+  every call.
+
+  The overall speedup of lily is about 5% on a run of wtk1-fugue2
+
+*/
+#define ly_symbol2scm(x) ({ static SCM cached;  \
+ (__builtin_constant_p (x)) \
+  ? ((cached) ? cached : scm_permanent_object (cached = gh_symbol2scm((char*)x))) \
+  : gh_symbol2scm(x); })
+#else
+inline SCM ly_symbol2scm(char const* x) { return gh_symbol2scm((char*)x); }
+#endif 
+
+
+
 String ly_scm2string (SCM s);
 String ly_symbol2string (SCM);
 SCM ly_offset2scm (Offset);