From 4132dc03beb1c636a3d4b7df81700fe02a4cf70d Mon Sep 17 00:00:00 2001 From: David Robillard Date: Fri, 31 Dec 2010 20:23:24 +0000 Subject: Only compile symbols once (cache compiled symbol values specially for this). Working pattern matching / deconstruction when object is a function parameter. git-svn-id: http://svn.drobilla.net/resp/resp@396 ad02d1e2-f140-0410-9f75-f8b11f17cedd --- src/compile.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) (limited to 'src/compile.cpp') diff --git a/src/compile.cpp b/src/compile.cpp index 53fd9ad..44017ec 100644 --- a/src/compile.cpp +++ b/src/compile.cpp @@ -39,15 +39,14 @@ compile_symbol(CEnv& cenv, const ASymbol* sym) throw() static CVal compile_literal_symbol(CEnv& cenv, const ASymbol* sym) throw() { - CVal* existing = cenv.vals.ref(sym); - if (existing) { - return *existing; + CEnv::CSyms::iterator i = cenv.cSyms.find(sym->sym()); + if (i != cenv.cSyms.end()) { + return i->second; } else { CVal compiled = cenv.engine()->compileString(cenv, sym->sym()); - cenv.vals.def(sym, compiled); + cenv.cSyms.insert(make_pair(sym->sym(), compiled)); return compiled; } - } static CVal -- cgit v1.2.1