diff options
author | Richard Purdie <rpurdie@linux.intel.com> | 2009-10-13 08:37:08 +0100 |
---|---|---|
committer | Richard Purdie <rpurdie@linux.intel.com> | 2009-10-13 08:38:13 +0100 |
commit | 76425295541165421914ef354900a3f2534f59f2 (patch) | |
tree | dc871f1369b66f1f4c2fc92638f7758322a9f593 /bitbake/lib/bb/parse | |
parent | 44549775ebc01edbca7d934875a43a2d315bdd9b (diff) | |
download | poky-76425295541165421914ef354900a3f2534f59f2.tar.gz |
bitbake: Anonymous funciton improvements - use methodpool to allow cached code and remove anonymous function indentation mismatch problems
Signed-off-by: Richard Purdie <rpurdie@linux.intel.com>
Diffstat (limited to 'bitbake/lib/bb/parse')
-rw-r--r-- | bitbake/lib/bb/parse/parse_py/BBHandler.py | 29 |
1 files changed, 17 insertions, 12 deletions
diff --git a/bitbake/lib/bb/parse/parse_py/BBHandler.py b/bitbake/lib/bb/parse/parse_py/BBHandler.py index e918ce3bb8..03976d4d8c 100644 --- a/bitbake/lib/bb/parse/parse_py/BBHandler.py +++ b/bitbake/lib/bb/parse/parse_py/BBHandler.py | |||
@@ -25,7 +25,7 @@ | |||
25 | # with this program; if not, write to the Free Software Foundation, Inc., | 25 | # with this program; if not, write to the Free Software Foundation, Inc., |
26 | # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | 26 | # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
27 | 27 | ||
28 | import re, bb, os, sys, time | 28 | import re, bb, os, sys, time, string |
29 | import bb.fetch, bb.build, bb.utils | 29 | import bb.fetch, bb.build, bb.utils |
30 | from bb import data, fetch, methodpool | 30 | from bb import data, fetch, methodpool |
31 | 31 | ||
@@ -89,7 +89,12 @@ def finalise(fn, d): | |||
89 | try: | 89 | try: |
90 | t = data.getVar('T', d) | 90 | t = data.getVar('T', d) |
91 | data.setVar('T', '${TMPDIR}/', d) | 91 | data.setVar('T', '${TMPDIR}/', d) |
92 | build.exec_func("__anonfunc", d) | 92 | anonfuncs = data.getVar('__BBANONFUNCS', d) or [] |
93 | code = "" | ||
94 | for f in anonfuncs: | ||
95 | code = code + " %s(d)\n" % f | ||
96 | data.setVar("__anonfunc", code, d) | ||
97 | build.exec_func_python("__anonfunc", d) | ||
93 | data.delVar('T', d) | 98 | data.delVar('T', d) |
94 | if t: | 99 | if t: |
95 | data.setVar('T', t, d) | 100 | data.setVar('T', t, d) |
@@ -205,17 +210,17 @@ def feeder(lineno, s, fn, root, d): | |||
205 | if __infunc__: | 210 | if __infunc__: |
206 | if s == '}': | 211 | if s == '}': |
207 | __body__.append('') | 212 | __body__.append('') |
208 | data.setVar(__infunc__, '\n'.join(__body__), d) | ||
209 | data.setVarFlag(__infunc__, "func", 1, d) | ||
210 | if __infunc__ == "__anonymous": | 213 | if __infunc__ == "__anonymous": |
211 | anonqueue = bb.data.getVar("__anonqueue", d) or [] | 214 | funcname = ("__anon_%s_%s" % (lineno, fn.translate(string.maketrans('/.+-', '____')))) |
212 | anonitem = {} | 215 | if not funcname in methodpool._parsed_fns: |
213 | anonitem["content"] = bb.data.getVar("__anonymous", d) | 216 | text = "def %s(d):\n" % (funcname) + '\n'.join(__body__) |
214 | anonitem["flags"] = bb.data.getVarFlags("__anonymous", d) | 217 | methodpool.insert_method(funcname, text, fn) |
215 | anonqueue.append(anonitem) | 218 | anonfuncs = data.getVar('__BBANONFUNCS', d) or [] |
216 | bb.data.setVar("__anonqueue", anonqueue, d) | 219 | anonfuncs.append(funcname) |
217 | bb.data.delVarFlags("__anonymous", d) | 220 | data.setVar('__BBANONFUNCS', anonfuncs, d) |
218 | bb.data.delVar("__anonymous", d) | 221 | else: |
222 | data.setVarFlag(__infunc__, "func", 1, d) | ||
223 | data.setVar(__infunc__, '\n'.join(__body__), d) | ||
219 | __infunc__ = "" | 224 | __infunc__ = "" |
220 | __body__ = [] | 225 | __body__ = [] |
221 | else: | 226 | else: |