diff options
author | Richard Purdie <richard@openedhand.com> | 2006-05-09 15:44:08 +0000 |
---|---|---|
committer | Richard Purdie <richard@openedhand.com> | 2006-05-09 15:44:08 +0000 |
commit | 27dba1e6247ae48349aee1bce141a9eefaafaad1 (patch) | |
tree | 822235005ccbd2707f7874ad680dedc4df36760c | |
parent | ed234aca98d0867c7b32801fc63820b19cf67df9 (diff) | |
download | poky-27dba1e6247ae48349aee1bce141a9eefaafaad1.tar.gz |
Update to bitbake 1.4.2 (latest stable branch release). This includes the caching speedups
git-svn-id: https://svn.o-hand.com/repos/poky/trunk@371 311d38ba-8fff-0310-9ca6-ca027cbcb966
28 files changed, 2431 insertions, 1674 deletions
diff --git a/bitbake/AUTHORS b/bitbake/AUTHORS index 4129e4c523..ef119cce22 100644 --- a/bitbake/AUTHORS +++ b/bitbake/AUTHORS | |||
@@ -1,5 +1,6 @@ | |||
1 | Phil Blundell <pb@handhelds.org> | ||
1 | Holger Freyther <zecke@handhelds.org> | 2 | Holger Freyther <zecke@handhelds.org> |
2 | Chris Larson <kergoth@handhelds.org> | 3 | Chris Larson <kergoth@handhelds.org> |
3 | Mickey Lauer <mickey@Vanille.de> | 4 | Mickey Lauer <mickey@Vanille.de> |
5 | Richard Purdie <rpurdie@rpsys.net> | ||
4 | Holger Schurig <holgerschurig@gmx.de> | 6 | Holger Schurig <holgerschurig@gmx.de> |
5 | Phil Blundell <pb@handhelds.org> | ||
diff --git a/bitbake/ChangeLog b/bitbake/ChangeLog index 3dfba1ed81..93cc45aaf4 100644 --- a/bitbake/ChangeLog +++ b/bitbake/ChangeLog | |||
@@ -1,9 +1,26 @@ | |||
1 | Changes in BitBake 1.3.x: | 1 | Changes in BitBake 1.4.2: |
2 | - Send logs to oe.pastebin.com instead of pastebin.com | ||
3 | fixes #856 | ||
4 | - Copy the internal bitbake data before building the | ||
5 | dependency graph. This fixes nano not having a | ||
6 | virtual/libc dependency | ||
7 | - Allow multiple TARBALL_STASH entries | ||
8 | - Cache, check if the directory exists before changing | ||
9 | into it | ||
10 | - git speedup cloning by not doing a checkout | ||
11 | - allow to have spaces in filenames (.conf, .bb, .bbclass) | ||
12 | |||
13 | Changes in BitBake 1.4.0: | ||
2 | - Fix to check both RDEPENDS and RDEPENDS_${PN} | 14 | - Fix to check both RDEPENDS and RDEPENDS_${PN} |
3 | - Fix a RDEPENDS parsing bug in utils:explode_deps() | 15 | - Fix a RDEPENDS parsing bug in utils:explode_deps() |
4 | - Update git fetcher behaviour to match git changes | 16 | - Update git fetcher behaviour to match git changes |
5 | - ASSUME_PROVIDED allowed to include runtime packages | 17 | - ASSUME_PROVIDED allowed to include runtime packages |
6 | - git fetcher cleanup and efficency improvements | 18 | - git fetcher cleanup and efficency improvements |
19 | - Change the format of the cache | ||
20 | - Update usermanual to document the Fetchers | ||
21 | - Major changes to caching with a new strategy | ||
22 | giving a major performance increase when reparsing | ||
23 | with few data changes | ||
7 | 24 | ||
8 | Changes in BitBake 1.3.3: | 25 | Changes in BitBake 1.3.3: |
9 | - Create a new Fetcher module to ease the | 26 | - Create a new Fetcher module to ease the |
diff --git a/bitbake/MANIFEST b/bitbake/MANIFEST index 14a21d7bf4..5823cd0707 100644 --- a/bitbake/MANIFEST +++ b/bitbake/MANIFEST | |||
@@ -2,10 +2,12 @@ AUTHORS | |||
2 | ChangeLog | 2 | ChangeLog |
3 | MANIFEST | 3 | MANIFEST |
4 | setup.py | 4 | setup.py |
5 | bin/bitdoc | ||
5 | bin/bbimage | 6 | bin/bbimage |
6 | bin/bitbake | 7 | bin/bitbake |
7 | lib/bb/__init__.py | 8 | lib/bb/__init__.py |
8 | lib/bb/build.py | 9 | lib/bb/build.py |
10 | lib/bb/cache.py | ||
9 | lib/bb/data.py | 11 | lib/bb/data.py |
10 | lib/bb/data_smart.py | 12 | lib/bb/data_smart.py |
11 | lib/bb/event.py | 13 | lib/bb/event.py |
@@ -18,6 +20,7 @@ lib/bb/fetch/svk.py | |||
18 | lib/bb/fetch/svn.py | 20 | lib/bb/fetch/svn.py |
19 | lib/bb/fetch/wget.py | 21 | lib/bb/fetch/wget.py |
20 | lib/bb/manifest.py | 22 | lib/bb/manifest.py |
23 | lib/bb/methodpool.py | ||
21 | lib/bb/parse/__init__.py | 24 | lib/bb/parse/__init__.py |
22 | lib/bb/parse/parse_py/BBHandler.py | 25 | lib/bb/parse/parse_py/BBHandler.py |
23 | lib/bb/parse/parse_py/ConfHandler.py | 26 | lib/bb/parse/parse_py/ConfHandler.py |
@@ -30,5 +33,6 @@ doc/manual/html.css | |||
30 | doc/manual/Makefile | 33 | doc/manual/Makefile |
31 | doc/manual/usermanual.xml | 34 | doc/manual/usermanual.xml |
32 | contrib/bbdev.sh | 35 | contrib/bbdev.sh |
36 | contrib/vim/syntax/bitbake.vim | ||
33 | conf/bitbake.conf | 37 | conf/bitbake.conf |
34 | classes/base.bbclass | 38 | classes/base.bbclass |
diff --git a/bitbake/bin/bitbake b/bitbake/bin/bitbake index 457fbb7527..10cf4bd00a 100755 --- a/bitbake/bin/bitbake +++ b/bitbake/bin/bitbake | |||
@@ -24,14 +24,14 @@ | |||
24 | import sys, os, getopt, glob, copy, os.path, re, time | 24 | import sys, os, getopt, glob, copy, os.path, re, time |
25 | sys.path.insert(0,os.path.join(os.path.dirname(os.path.dirname(sys.argv[0])), 'lib')) | 25 | sys.path.insert(0,os.path.join(os.path.dirname(os.path.dirname(sys.argv[0])), 'lib')) |
26 | import bb | 26 | import bb |
27 | from bb import utils, data, parse, debug, event, fatal | 27 | from bb import utils, data, parse, debug, event, fatal, cache |
28 | from sets import Set | 28 | from sets import Set |
29 | import itertools, optparse | 29 | import itertools, optparse |
30 | 30 | ||
31 | parsespin = itertools.cycle( r'|/-\\' ) | 31 | parsespin = itertools.cycle( r'|/-\\' ) |
32 | bbdebug = 0 | 32 | bbdebug = 0 |
33 | 33 | ||
34 | __version__ = "1.3.3.2" | 34 | __version__ = "1.4.3" |
35 | 35 | ||
36 | #============================================================================# | 36 | #============================================================================# |
37 | # BBParsingStatus | 37 | # BBParsingStatus |
@@ -44,7 +44,6 @@ class BBParsingStatus: | |||
44 | """ | 44 | """ |
45 | 45 | ||
46 | def __init__(self): | 46 | def __init__(self): |
47 | self.cache_dirty = False | ||
48 | self.providers = {} | 47 | self.providers = {} |
49 | self.rproviders = {} | 48 | self.rproviders = {} |
50 | self.packages = {} | 49 | self.packages = {} |
@@ -60,34 +59,35 @@ class BBParsingStatus: | |||
60 | self.pkg_dp = {} | 59 | self.pkg_dp = {} |
61 | self.pn_provides = {} | 60 | self.pn_provides = {} |
62 | self.all_depends = Set() | 61 | self.all_depends = Set() |
62 | self.build_all = {} | ||
63 | self.rundeps = {} | ||
64 | self.runrecs = {} | ||
65 | self.stamp = {} | ||
63 | 66 | ||
64 | def handle_bb_data(self, file_name, bb_data, cached): | 67 | def handle_bb_data(self, file_name, bb_cache, cached): |
65 | """ | 68 | """ |
66 | We will fill the dictionaries with the stuff we | 69 | We will fill the dictionaries with the stuff we |
67 | need for building the tree more fast | 70 | need for building the tree more fast |
68 | """ | 71 | """ |
69 | if bb_data == None: | ||
70 | return | ||
71 | |||
72 | if not cached: | ||
73 | self.cache_dirty = True | ||
74 | |||
75 | pn = bb.data.getVar('PN', bb_data, True) | ||
76 | pv = bb.data.getVar('PV', bb_data, True) | ||
77 | pr = bb.data.getVar('PR', bb_data, True) | ||
78 | dp = int(bb.data.getVar('DEFAULT_PREFERENCE', bb_data, True) or "0") | ||
79 | provides = Set([pn] + (bb.data.getVar("PROVIDES", bb_data, 1) or "").split()) | ||
80 | depends = (bb.data.getVar("DEPENDS", bb_data, True) or "").split() | ||
81 | packages = (bb.data.getVar('PACKAGES', bb_data, True) or "").split() | ||
82 | packages_dynamic = (bb.data.getVar('PACKAGES_DYNAMIC', bb_data, True) or "").split() | ||
83 | rprovides = (bb.data.getVar("RPROVIDES", bb_data, 1) or "").split() | ||
84 | 72 | ||
73 | pn = bb_cache.getVar('PN', file_name, True) | ||
74 | pv = bb_cache.getVar('PV', file_name, True) | ||
75 | pr = bb_cache.getVar('PR', file_name, True) | ||
76 | dp = int(bb_cache.getVar('DEFAULT_PREFERENCE', file_name, True) or "0") | ||
77 | provides = Set([pn] + (bb_cache.getVar("PROVIDES", file_name, True) or "").split()) | ||
78 | depends = (bb_cache.getVar("DEPENDS", file_name, True) or "").split() | ||
79 | packages = (bb_cache.getVar('PACKAGES', file_name, True) or "").split() | ||
80 | packages_dynamic = (bb_cache.getVar('PACKAGES_DYNAMIC', file_name, True) or "").split() | ||
81 | rprovides = (bb_cache.getVar("RPROVIDES", file_name, True) or "").split() | ||
85 | 82 | ||
86 | # build PackageName to FileName lookup table | 83 | # build PackageName to FileName lookup table |
87 | if pn not in self.pkg_pn: | 84 | if pn not in self.pkg_pn: |
88 | self.pkg_pn[pn] = [] | 85 | self.pkg_pn[pn] = [] |
89 | self.pkg_pn[pn].append(file_name) | 86 | self.pkg_pn[pn].append(file_name) |
90 | 87 | ||
88 | self.build_all[file_name] = int(bb_cache.getVar('BUILD_ALL_DEPS', file_name, True) or "0") | ||
89 | self.stamp[file_name] = bb_cache.getVar('STAMP', file_name, True) | ||
90 | |||
91 | # build FileName to PackageName lookup table | 91 | # build FileName to PackageName lookup table |
92 | self.pkg_fn[file_name] = pn | 92 | self.pkg_fn[file_name] = pn |
93 | self.pkg_pvpr[file_name] = (pv,pr) | 93 | self.pkg_pvpr[file_name] = (pv,pr) |
@@ -114,7 +114,7 @@ class BBParsingStatus: | |||
114 | if not package in self.packages: | 114 | if not package in self.packages: |
115 | self.packages[package] = [] | 115 | self.packages[package] = [] |
116 | self.packages[package].append(file_name) | 116 | self.packages[package].append(file_name) |
117 | rprovides += (bb.data.getVar("RPROVIDES_%s" % package, bb_data, 1) or "").split() | 117 | rprovides += (bb_cache.getVar("RPROVIDES_%s" % package, file_name, 1) or "").split() |
118 | 118 | ||
119 | for package in packages_dynamic: | 119 | for package in packages_dynamic: |
120 | if not package in self.packages_dynamic: | 120 | if not package in self.packages_dynamic: |
@@ -126,9 +126,32 @@ class BBParsingStatus: | |||
126 | self.rproviders[rprovide] = [] | 126 | self.rproviders[rprovide] = [] |
127 | self.rproviders[rprovide].append(file_name) | 127 | self.rproviders[rprovide].append(file_name) |
128 | 128 | ||
129 | # Build hash of runtime depeneds and rececommends | ||
130 | |||
131 | def add_dep(deplist, deps): | ||
132 | for dep in deps: | ||
133 | if not dep in deplist: | ||
134 | deplist[dep] = "" | ||
135 | |||
136 | if not file_name in self.rundeps: | ||
137 | self.rundeps[file_name] = {} | ||
138 | if not file_name in self.runrecs: | ||
139 | self.runrecs[file_name] = {} | ||
140 | |||
141 | for package in packages + [pn]: | ||
142 | if not package in self.rundeps[file_name]: | ||
143 | self.rundeps[file_name][package] = {} | ||
144 | if not package in self.runrecs[file_name]: | ||
145 | self.runrecs[file_name][package] = {} | ||
146 | |||
147 | add_dep(self.rundeps[file_name][package], bb.utils.explode_deps(bb_cache.getVar('RDEPENDS', file_name, True) or "")) | ||
148 | add_dep(self.runrecs[file_name][package], bb.utils.explode_deps(bb_cache.getVar('RRECOMMENDS', file_name, True) or "")) | ||
149 | add_dep(self.rundeps[file_name][package], bb.utils.explode_deps(bb_cache.getVar("RDEPENDS_%s" % package, file_name, True) or "")) | ||
150 | add_dep(self.runrecs[file_name][package], bb.utils.explode_deps(bb_cache.getVar("RRECOMMENDS_%s" % package, file_name, True) or "")) | ||
151 | |||
129 | # Collect files we may need for possible world-dep | 152 | # Collect files we may need for possible world-dep |
130 | # calculations | 153 | # calculations |
131 | if not bb.data.getVar('BROKEN', bb_data, True) and not bb.data.getVar('EXCLUDE_FROM_WORLD', bb_data, True): | 154 | if not bb_cache.getVar('BROKEN', file_name, True) and not bb_cache.getVar('EXCLUDE_FROM_WORLD', file_name, True): |
132 | self.possible_world.append(file_name) | 155 | self.possible_world.append(file_name) |
133 | 156 | ||
134 | 157 | ||
@@ -166,7 +189,6 @@ class BBConfiguration( object ): | |||
166 | def __init__( self, options ): | 189 | def __init__( self, options ): |
167 | for key, val in options.__dict__.items(): | 190 | for key, val in options.__dict__.items(): |
168 | setattr( self, key, val ) | 191 | setattr( self, key, val ) |
169 | self.data = data.init() | ||
170 | 192 | ||
171 | #============================================================================# | 193 | #============================================================================# |
172 | # BBCooker | 194 | # BBCooker |
@@ -190,8 +212,8 @@ class BBCooker: | |||
190 | self.stats = BBStatistics() | 212 | self.stats = BBStatistics() |
191 | self.status = None | 213 | self.status = None |
192 | 214 | ||
193 | self.pkgdata = None | ||
194 | self.cache = None | 215 | self.cache = None |
216 | self.bb_cache = None | ||
195 | 217 | ||
196 | def tryBuildPackage( self, fn, item, the_data ): | 218 | def tryBuildPackage( self, fn, item, the_data ): |
197 | """Build one package""" | 219 | """Build one package""" |
@@ -226,10 +248,11 @@ class BBCooker: | |||
226 | If build_depends is empty, we're dealing with a runtime depends | 248 | If build_depends is empty, we're dealing with a runtime depends |
227 | """ | 249 | """ |
228 | 250 | ||
229 | the_data = self.pkgdata[fn] | 251 | the_data = self.bb_cache.loadDataFull(fn, self) |
230 | 252 | ||
231 | if not buildAllDeps: | 253 | # Only follow all (runtime) dependencies if doing a build |
232 | buildAllDeps = bb.data.getVar('BUILD_ALL_DEPS', the_data, True) or False | 254 | if not buildAllDeps and self.configuration.cmd is "build": |
255 | buildAllDeps = self.status.build_all[fn] | ||
233 | 256 | ||
234 | # Error on build time dependency loops | 257 | # Error on build time dependency loops |
235 | if build_depends and build_depends.count(fn) > 1: | 258 | if build_depends and build_depends.count(fn) > 1: |
@@ -402,12 +425,15 @@ class BBCooker: | |||
402 | 425 | ||
403 | print "%-30s %20s %20s" % (p, latest[0][0] + "-" + latest[0][1], | 426 | print "%-30s %20s %20s" % (p, latest[0][0] + "-" + latest[0][1], |
404 | prefstr) | 427 | prefstr) |
428 | |||
405 | 429 | ||
406 | def showEnvironment( self ): | 430 | def showEnvironment( self ): |
407 | """Show the outer or per-package environment""" | 431 | """Show the outer or per-package environment""" |
408 | if self.configuration.buildfile: | 432 | if self.configuration.buildfile: |
433 | self.cb = None | ||
434 | self.bb_cache = bb.cache.init(self) | ||
409 | try: | 435 | try: |
410 | self.configuration.data, fromCache = self.load_bbfile( self.configuration.buildfile ) | 436 | self.configuration.data = self.bb_cache.loadDataFull(self.configuration.buildfile, self) |
411 | except IOError, e: | 437 | except IOError, e: |
412 | fatal("Unable to read %s: %s" % ( self.configuration.buildfile, e )) | 438 | fatal("Unable to read %s: %s" % ( self.configuration.buildfile, e )) |
413 | except Exception, e: | 439 | except Exception, e: |
@@ -457,11 +483,10 @@ class BBCooker: | |||
457 | # look to see if one of them is already staged, or marked as preferred. | 483 | # look to see if one of them is already staged, or marked as preferred. |
458 | # if so, bump it to the head of the queue | 484 | # if so, bump it to the head of the queue |
459 | for p in providers: | 485 | for p in providers: |
460 | the_data = self.pkgdata[p] | 486 | pn = self.status.pkg_fn[p] |
461 | pn = bb.data.getVar('PN', the_data, 1) | 487 | pv, pr = self.status.pkg_pvpr[p] |
462 | pv = bb.data.getVar('PV', the_data, 1) | 488 | |
463 | pr = bb.data.getVar('PR', the_data, 1) | 489 | stamp = '%s.do_populate_staging' % self.status.stamp[p] |
464 | stamp = '%s.do_populate_staging' % bb.data.getVar('STAMP', the_data, 1) | ||
465 | if os.path.exists(stamp): | 490 | if os.path.exists(stamp): |
466 | (newvers, fn) = preferred_versions[pn] | 491 | (newvers, fn) = preferred_versions[pn] |
467 | if not fn in eligible: | 492 | if not fn in eligible: |
@@ -470,11 +495,11 @@ class BBCooker: | |||
470 | oldver = "%s-%s" % (pv, pr) | 495 | oldver = "%s-%s" % (pv, pr) |
471 | newver = '-'.join(newvers) | 496 | newver = '-'.join(newvers) |
472 | if (newver != oldver): | 497 | if (newver != oldver): |
473 | extra_chat = "; upgrading from %s to %s" % (oldver, newver) | 498 | extra_chat = "%s (%s) already staged but upgrading to %s to satisfy %s" % (pn, oldver, newver, item) |
474 | else: | 499 | else: |
475 | extra_chat = "" | 500 | extra_chat = "Selecting already-staged %s (%s) to satisfy %s" % (pn, oldver, item) |
476 | if self.configuration.verbose: | 501 | if self.configuration.verbose: |
477 | bb.note("selecting already-staged %s to satisfy %s%s" % (pn, item, extra_chat)) | 502 | bb.note("%s" % extra_chat) |
478 | eligible.remove(fn) | 503 | eligible.remove(fn) |
479 | eligible = [fn] + eligible | 504 | eligible = [fn] + eligible |
480 | discriminated = True | 505 | discriminated = True |
@@ -656,20 +681,11 @@ class BBCooker: | |||
656 | 681 | ||
657 | rdepends = [] | 682 | rdepends = [] |
658 | self.rbuild_cache.append(item) | 683 | self.rbuild_cache.append(item) |
659 | the_data = self.pkgdata[fn] | 684 | |
660 | pn = self.status.pkg_fn[fn] | 685 | if fn in self.status.rundeps and item in self.status.rundeps[fn]: |
661 | 686 | rdepends += self.status.rundeps[fn][item].keys() | |
662 | if (item == pn): | 687 | if fn in self.status.runrecs and item in self.status.runrecs[fn]: |
663 | rdepends += bb.utils.explode_deps(bb.data.getVar('RDEPENDS', the_data, True) or "") | 688 | rdepends += self.status.runrecs[fn][item].keys() |
664 | rdepends += bb.utils.explode_deps(bb.data.getVar('RRECOMMENDS', the_data, True) or "") | ||
665 | rdepends += bb.utils.explode_deps(bb.data.getVar("RDEPENDS_%s" % pn, the_data, True) or "") | ||
666 | rdepends += bb.utils.explode_deps(bb.data.getVar('RRECOMMENDS_%s' % pn, the_data, True) or "") | ||
667 | else: | ||
668 | packages = (bb.data.getVar('PACKAGES', the_data, 1).split() or "") | ||
669 | for package in packages: | ||
670 | if package == item: | ||
671 | rdepends += bb.utils.explode_deps(bb.data.getVar("RDEPENDS_%s" % package, the_data, True) or "") | ||
672 | rdepends += bb.utils.explode_deps(bb.data.getVar("RRECOMMENDS_%s" % package, the_data, True) or "") | ||
673 | 689 | ||
674 | bb.debug(2, "Additional runtime dependencies for %s are: %s" % (item, " ".join(rdepends))) | 690 | bb.debug(2, "Additional runtime dependencies for %s are: %s" % (item, " ".join(rdepends))) |
675 | 691 | ||
@@ -684,6 +700,9 @@ class BBCooker: | |||
684 | all_depends = self.status.all_depends | 700 | all_depends = self.status.all_depends |
685 | pn_provides = self.status.pn_provides | 701 | pn_provides = self.status.pn_provides |
686 | 702 | ||
703 | localdata = data.createCopy(self.configuration.data) | ||
704 | bb.data.update_data(localdata) | ||
705 | |||
687 | def calc_bbfile_priority(filename): | 706 | def calc_bbfile_priority(filename): |
688 | for (regex, pri) in self.status.bbfile_config_priorities: | 707 | for (regex, pri) in self.status.bbfile_config_priorities: |
689 | if regex.match(filename): | 708 | if regex.match(filename): |
@@ -691,17 +710,22 @@ class BBCooker: | |||
691 | return 0 | 710 | return 0 |
692 | 711 | ||
693 | # Handle PREFERRED_PROVIDERS | 712 | # Handle PREFERRED_PROVIDERS |
694 | for p in (bb.data.getVar('PREFERRED_PROVIDERS', self.configuration.data, 1) or "").split(): | 713 | for p in (bb.data.getVar('PREFERRED_PROVIDERS', localdata, 1) or "").split(): |
695 | (providee, provider) = p.split(':') | 714 | (providee, provider) = p.split(':') |
696 | if providee in self.preferred and self.preferred[providee] != provider: | 715 | if providee in self.preferred and self.preferred[providee] != provider: |
697 | bb.error("conflicting preferences for %s: both %s and %s specified" % (providee, provider, self.preferred[providee])) | 716 | bb.error("conflicting preferences for %s: both %s and %s specified" % (providee, provider, self.preferred[providee])) |
698 | self.preferred[providee] = provider | 717 | self.preferred[providee] = provider |
699 | 718 | ||
700 | # Calculate priorities for each file | 719 | # Calculate priorities for each file |
701 | for p in self.pkgdata.keys(): | 720 | for p in self.status.pkg_fn.keys(): |
702 | self.status.bbfile_priority[p] = calc_bbfile_priority(p) | 721 | self.status.bbfile_priority[p] = calc_bbfile_priority(p) |
703 | 722 | ||
704 | # Build package list for "bitbake world" | 723 | def buildWorldTargetList(self): |
724 | """ | ||
725 | Build package list for "bitbake world" | ||
726 | """ | ||
727 | all_depends = self.status.all_depends | ||
728 | pn_provides = self.status.pn_provides | ||
705 | bb.debug(1, "collating packages for \"world\"") | 729 | bb.debug(1, "collating packages for \"world\"") |
706 | for f in self.status.possible_world: | 730 | for f in self.status.possible_world: |
707 | terminal = True | 731 | terminal = True |
@@ -724,9 +748,10 @@ class BBCooker: | |||
724 | self.status.possible_world = None | 748 | self.status.possible_world = None |
725 | self.status.all_depends = None | 749 | self.status.all_depends = None |
726 | 750 | ||
727 | def myProgressCallback( self, x, y, f, file_data, from_cache ): | 751 | def myProgressCallback( self, x, y, f, bb_cache, from_cache ): |
728 | # feed the status with new input | 752 | # feed the status with new input |
729 | self.status.handle_bb_data(f, file_data, from_cache) | 753 | |
754 | self.status.handle_bb_data(f, bb_cache, from_cache) | ||
730 | 755 | ||
731 | if bbdebug > 0: | 756 | if bbdebug > 0: |
732 | return | 757 | return |
@@ -755,6 +780,13 @@ class BBCooker: | |||
755 | def parseConfigurationFile( self, afile ): | 780 | def parseConfigurationFile( self, afile ): |
756 | try: | 781 | try: |
757 | self.configuration.data = bb.parse.handle( afile, self.configuration.data ) | 782 | self.configuration.data = bb.parse.handle( afile, self.configuration.data ) |
783 | |||
784 | # Add the handlers we inherited by INHERITS | ||
785 | # FIXME: This assumes that we included at least one .inc file | ||
786 | for var in bb.data.keys(self.configuration.data): | ||
787 | if bb.data.getVarFlag(var, 'handler', self.configuration.data): | ||
788 | bb.event.register(var,bb.data.getVar(var,self.configuration.data)) | ||
789 | |||
758 | except IOError: | 790 | except IOError: |
759 | bb.fatal( "Unable to open %s" % afile ) | 791 | bb.fatal( "Unable to open %s" % afile ) |
760 | except bb.parse.ParseError, details: | 792 | except bb.parse.ParseError, details: |
@@ -786,6 +818,12 @@ class BBCooker: | |||
786 | 818 | ||
787 | 819 | ||
788 | def cook( self, configuration, args ): | 820 | def cook( self, configuration, args ): |
821 | """ | ||
822 | We are building stuff here. We do the building | ||
823 | from here. By default we try to execute task | ||
824 | build. | ||
825 | """ | ||
826 | |||
789 | self.configuration = configuration | 827 | self.configuration = configuration |
790 | 828 | ||
791 | if not self.configuration.cmd: | 829 | if not self.configuration.cmd: |
@@ -801,6 +839,13 @@ class BBCooker: | |||
801 | 839 | ||
802 | self.parseConfigurationFile( os.path.join( "conf", "bitbake.conf" ) ) | 840 | self.parseConfigurationFile( os.path.join( "conf", "bitbake.conf" ) ) |
803 | 841 | ||
842 | |||
843 | # | ||
844 | # Special updated configuration we use for firing events | ||
845 | # | ||
846 | self.configuration.event_data = bb.data.createCopy(self.configuration.data) | ||
847 | bb.data.update_data(self.configuration.event_data) | ||
848 | |||
804 | if self.configuration.show_environment: | 849 | if self.configuration.show_environment: |
805 | self.showEnvironment() | 850 | self.showEnvironment() |
806 | sys.exit( 0 ) | 851 | sys.exit( 0 ) |
@@ -876,18 +921,18 @@ class BBCooker: | |||
876 | print "Requested parsing .bb files only. Exiting." | 921 | print "Requested parsing .bb files only. Exiting." |
877 | return | 922 | return |
878 | 923 | ||
879 | bb.data.update_data( self.configuration.data ) | ||
880 | self.buildDepgraph() | 924 | self.buildDepgraph() |
881 | 925 | ||
882 | if self.configuration.show_versions: | 926 | if self.configuration.show_versions: |
883 | self.showVersions() | 927 | self.showVersions() |
884 | sys.exit( 0 ) | 928 | sys.exit( 0 ) |
885 | if 'world' in pkgs_to_build: | 929 | if 'world' in pkgs_to_build: |
930 | self.buildWorldTargetList() | ||
886 | pkgs_to_build.remove('world') | 931 | pkgs_to_build.remove('world') |
887 | for t in self.status.world_target: | 932 | for t in self.status.world_target: |
888 | pkgs_to_build.append(t) | 933 | pkgs_to_build.append(t) |
889 | 934 | ||
890 | bb.event.fire(bb.event.BuildStarted(buildname, pkgs_to_build, self.configuration.data)) | 935 | bb.event.fire(bb.event.BuildStarted(buildname, pkgs_to_build, self.configuration.event_data)) |
891 | 936 | ||
892 | failures = 0 | 937 | failures = 0 |
893 | for k in pkgs_to_build: | 938 | for k in pkgs_to_build: |
@@ -905,7 +950,7 @@ class BBCooker: | |||
905 | if self.configuration.abort: | 950 | if self.configuration.abort: |
906 | sys.exit(1) | 951 | sys.exit(1) |
907 | 952 | ||
908 | bb.event.fire(bb.event.BuildCompleted(buildname, pkgs_to_build, self.configuration.data, failures)) | 953 | bb.event.fire(bb.event.BuildCompleted(buildname, pkgs_to_build, self.configuration.event_data, failures)) |
909 | 954 | ||
910 | sys.exit( self.stats.show() ) | 955 | sys.exit( self.stats.show() ) |
911 | 956 | ||
@@ -932,77 +977,12 @@ class BBCooker: | |||
932 | return [] | 977 | return [] |
933 | return finddata.readlines() | 978 | return finddata.readlines() |
934 | 979 | ||
935 | def deps_clean(self, d): | ||
936 | depstr = data.getVar('__depends', d) | ||
937 | if depstr: | ||
938 | deps = depstr.split(" ") | ||
939 | for dep in deps: | ||
940 | (f,old_mtime_s) = dep.split("@") | ||
941 | old_mtime = int(old_mtime_s) | ||
942 | new_mtime = parse.cached_mtime(f) | ||
943 | if (new_mtime > old_mtime): | ||
944 | return False | ||
945 | return True | ||
946 | |||
947 | def load_bbfile( self, bbfile ): | ||
948 | """Load and parse one .bb build file""" | ||
949 | |||
950 | if not self.cache in [None, '']: | ||
951 | # get the times | ||
952 | cache_mtime = data.init_db_mtime(self.cache, bbfile) | ||
953 | file_mtime = parse.cached_mtime(bbfile) | ||
954 | |||
955 | if file_mtime > cache_mtime: | ||
956 | #print " : '%s' dirty. reparsing..." % bbfile | ||
957 | pass | ||
958 | else: | ||
959 | #print " : '%s' clean. loading from cache..." % bbfile | ||
960 | cache_data = data.init_db( self.cache, bbfile, False ) | ||
961 | if self.deps_clean(cache_data): | ||
962 | return cache_data, True | ||
963 | |||
964 | topdir = data.getVar('TOPDIR', self.configuration.data) | ||
965 | if not topdir: | ||
966 | topdir = os.path.abspath(os.getcwd()) | ||
967 | # set topdir to here | ||
968 | data.setVar('TOPDIR', topdir, self.configuration) | ||
969 | bbfile = os.path.abspath(bbfile) | ||
970 | bbfile_loc = os.path.abspath(os.path.dirname(bbfile)) | ||
971 | # expand tmpdir to include this topdir | ||
972 | data.setVar('TMPDIR', data.getVar('TMPDIR', self.configuration.data, 1) or "", self.configuration.data) | ||
973 | # set topdir to location of .bb file | ||
974 | topdir = bbfile_loc | ||
975 | #data.setVar('TOPDIR', topdir, cfg) | ||
976 | # go there | ||
977 | oldpath = os.path.abspath(os.getcwd()) | ||
978 | os.chdir(topdir) | ||
979 | bb = data.init_db(self.cache,bbfile, True, self.configuration.data) | ||
980 | try: | ||
981 | parse.handle(bbfile, bb) # read .bb data | ||
982 | if not self.cache in [None, '']: | ||
983 | bb.commit(parse.cached_mtime(bbfile)) # write cache | ||
984 | os.chdir(oldpath) | ||
985 | return bb, False | ||
986 | finally: | ||
987 | os.chdir(oldpath) | ||
988 | |||
989 | def collect_bbfiles( self, progressCallback ): | 980 | def collect_bbfiles( self, progressCallback ): |
990 | """Collect all available .bb build files""" | 981 | """Collect all available .bb build files""" |
991 | self.cb = progressCallback | 982 | self.cb = progressCallback |
992 | parsed, cached, skipped, masked = 0, 0, 0, 0 | 983 | parsed, cached, skipped, masked = 0, 0, 0, 0 |
993 | self.cache = bb.data.getVar( "CACHE", self.configuration.data, 1 ) | 984 | self.bb_cache = bb.cache.init(self) |
994 | self.pkgdata = data.pkgdata( not self.cache in [None, ''], self.cache, self.configuration.data ) | ||
995 | 985 | ||
996 | if not self.cache in [None, '']: | ||
997 | if self.cb is not None: | ||
998 | print "NOTE: Using cache in '%s'" % self.cache | ||
999 | try: | ||
1000 | os.stat( self.cache ) | ||
1001 | except OSError: | ||
1002 | bb.mkdirhier( self.cache ) | ||
1003 | else: | ||
1004 | if self.cb is not None: | ||
1005 | print "NOTE: Not using a cache. Set CACHE = <directory> to enable." | ||
1006 | files = (data.getVar( "BBFILES", self.configuration.data, 1 ) or "").split() | 986 | files = (data.getVar( "BBFILES", self.configuration.data, 1 ) or "").split() |
1007 | data.setVar("BBFILES", " ".join(files), self.configuration.data) | 987 | data.setVar("BBFILES", " ".join(files), self.configuration.data) |
1008 | 988 | ||
@@ -1037,43 +1017,49 @@ class BBCooker: | |||
1037 | 1017 | ||
1038 | # read a file's metadata | 1018 | # read a file's metadata |
1039 | try: | 1019 | try: |
1040 | bb_data, fromCache = self.load_bbfile(f) | 1020 | fromCache, skip = self.bb_cache.loadData(f, self) |
1041 | if fromCache: cached += 1 | 1021 | if skip: |
1022 | skipped += 1 | ||
1023 | #bb.note("Skipping %s" % f) | ||
1024 | self.bb_cache.skip(f) | ||
1025 | continue | ||
1026 | elif fromCache: cached += 1 | ||
1042 | else: parsed += 1 | 1027 | else: parsed += 1 |
1043 | deps = None | 1028 | deps = None |
1044 | if bb_data is not None: | 1029 | |
1045 | # allow metadata files to add items to BBFILES | 1030 | # allow metadata files to add items to BBFILES |
1046 | #data.update_data(self.pkgdata[f]) | 1031 | #data.update_data(self.pkgdata[f]) |
1047 | addbbfiles = data.getVar('BBFILES', bb_data) or None | 1032 | addbbfiles = self.bb_cache.getVar('BBFILES', f, False) or None |
1048 | if addbbfiles: | 1033 | if addbbfiles: |
1049 | for aof in addbbfiles.split(): | 1034 | for aof in addbbfiles.split(): |
1050 | if not files.count(aof): | 1035 | if not files.count(aof): |
1051 | if not os.path.isabs(aof): | 1036 | if not os.path.isabs(aof): |
1052 | aof = os.path.join(os.path.dirname(f),aof) | 1037 | aof = os.path.join(os.path.dirname(f),aof) |
1053 | files.append(aof) | 1038 | files.append(aof) |
1054 | for var in bb_data.keys(): | ||
1055 | if data.getVarFlag(var, "handler", bb_data) and data.getVar(var, bb_data): | ||
1056 | event.register(data.getVar(var, bb_data)) | ||
1057 | self.pkgdata[f] = bb_data | ||
1058 | 1039 | ||
1059 | # now inform the caller | 1040 | # now inform the caller |
1060 | if self.cb is not None: | 1041 | if self.cb is not None: |
1061 | self.cb( i + 1, len( newfiles ), f, bb_data, fromCache ) | 1042 | self.cb( i + 1, len( newfiles ), f, self.bb_cache, fromCache ) |
1062 | 1043 | ||
1063 | except IOError, e: | 1044 | except IOError, e: |
1045 | self.bb_cache.remove(f) | ||
1064 | bb.error("opening %s: %s" % (f, e)) | 1046 | bb.error("opening %s: %s" % (f, e)) |
1065 | pass | 1047 | pass |
1066 | except bb.parse.SkipPackage: | ||
1067 | skipped += 1 | ||
1068 | pass | ||
1069 | except KeyboardInterrupt: | 1048 | except KeyboardInterrupt: |
1049 | self.bb_cache.sync() | ||
1070 | raise | 1050 | raise |
1071 | except Exception, e: | 1051 | except Exception, e: |
1052 | self.bb_cache.remove(f) | ||
1072 | bb.error("%s while parsing %s" % (e, f)) | 1053 | bb.error("%s while parsing %s" % (e, f)) |
1054 | except: | ||
1055 | self.bb_cache.remove(f) | ||
1056 | raise | ||
1073 | 1057 | ||
1074 | if self.cb is not None: | 1058 | if self.cb is not None: |
1075 | print "\rNOTE: Parsing finished. %d cached, %d parsed, %d skipped, %d masked." % ( cached, parsed, skipped, masked ), | 1059 | print "\rNOTE: Parsing finished. %d cached, %d parsed, %d skipped, %d masked." % ( cached, parsed, skipped, masked ), |
1076 | 1060 | ||
1061 | self.bb_cache.sync() | ||
1062 | |||
1077 | #============================================================================# | 1063 | #============================================================================# |
1078 | # main | 1064 | # main |
1079 | #============================================================================# | 1065 | #============================================================================# |
diff --git a/bitbake/bin/bitbakec b/bitbake/bin/bitbakec deleted file mode 100644 index db6a160303..0000000000 --- a/bitbake/bin/bitbakec +++ /dev/null | |||
Binary files differ | |||
diff --git a/bitbake/conf/bitbake.conf b/bitbake/conf/bitbake.conf index fd216a3261..d288fee78f 100644 --- a/bitbake/conf/bitbake.conf +++ b/bitbake/conf/bitbake.conf | |||
@@ -51,5 +51,5 @@ T = "${WORKDIR}/temp" | |||
51 | TARGET_ARCH = "${BUILD_ARCH}" | 51 | TARGET_ARCH = "${BUILD_ARCH}" |
52 | TMPDIR = "${TOPDIR}/tmp" | 52 | TMPDIR = "${TOPDIR}/tmp" |
53 | UPDATECOMMAND = "" | 53 | UPDATECOMMAND = "" |
54 | UPDATECOMMAND_cvs = "/usr/bin/env cvs update ${CVSCOOPTS}" | 54 | UPDATECOMMAND_cvs = "/usr/bin/env cvs -d${CVSROOT} update ${CVSCOOPTS}" |
55 | WORKDIR = "${TMPDIR}/work/${PF}" | 55 | WORKDIR = "${TMPDIR}/work/${PF}" |
diff --git a/bitbake/lib/bb/__init__.py b/bitbake/lib/bb/__init__.py index c6c0beb792..c3e7a16658 100644 --- a/bitbake/lib/bb/__init__.py +++ b/bitbake/lib/bb/__init__.py | |||
@@ -23,7 +23,7 @@ this program; if not, write to the Free Software Foundation, Inc., 59 Temple | |||
23 | Place, Suite 330, Boston, MA 02111-1307 USA. | 23 | Place, Suite 330, Boston, MA 02111-1307 USA. |
24 | """ | 24 | """ |
25 | 25 | ||
26 | __version__ = "1.3.3.4" | 26 | __version__ = "1.4.3" |
27 | 27 | ||
28 | __all__ = [ | 28 | __all__ = [ |
29 | 29 | ||
@@ -60,7 +60,9 @@ __all__ = [ | |||
60 | "event", | 60 | "event", |
61 | "build", | 61 | "build", |
62 | "fetch", | 62 | "fetch", |
63 | "manifest" | 63 | "manifest", |
64 | "methodpool", | ||
65 | "cache", | ||
64 | ] | 66 | ] |
65 | 67 | ||
66 | whitespace = '\t\n\x0b\x0c\r ' | 68 | whitespace = '\t\n\x0b\x0c\r ' |
diff --git a/bitbake/lib/bb/cache.py b/bitbake/lib/bb/cache.py new file mode 100644 index 0000000000..921a9f7589 --- /dev/null +++ b/bitbake/lib/bb/cache.py | |||
@@ -0,0 +1,306 @@ | |||
1 | #!/usr/bin/env python | ||
2 | # ex:ts=4:sw=4:sts=4:et | ||
3 | # -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- | ||
4 | """ | ||
5 | BitBake 'Event' implementation | ||
6 | |||
7 | Caching of bitbake variables before task execution | ||
8 | |||
9 | # Copyright (C) 2006 Richard Purdie | ||
10 | |||
11 | # but small sections based on code from bin/bitbake: | ||
12 | # Copyright (C) 2003, 2004 Chris Larson | ||
13 | # Copyright (C) 2003, 2004 Phil Blundell | ||
14 | # Copyright (C) 2003 - 2005 Michael 'Mickey' Lauer | ||
15 | # Copyright (C) 2005 Holger Hans Peter Freyther | ||
16 | # Copyright (C) 2005 ROAD GmbH | ||
17 | |||
18 | This program is free software; you can redistribute it and/or modify it under | ||
19 | the terms of the GNU General Public License as published by the Free Software | ||
20 | Foundation; either version 2 of the License, or (at your option) any later | ||
21 | version. | ||
22 | |||
23 | This program is distributed in the hope that it will be useful, but WITHOUT | ||
24 | ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS | ||
25 | FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. | ||
26 | |||
27 | You should have received a copy of the GNU General Public License along with | ||
28 | this program; if not, write to the Free Software Foundation, Inc., 59 Temple | ||
29 | Place, Suite 330, Boston, MA 02111-1307 USA. | ||
30 | |||
31 | """ | ||
32 | |||
33 | import os, re | ||
34 | import bb.data | ||
35 | import bb.utils | ||
36 | |||
37 | try: | ||
38 | import cPickle as pickle | ||
39 | except ImportError: | ||
40 | import pickle | ||
41 | print "NOTE: Importing cPickle failed. Falling back to a very slow implementation." | ||
42 | |||
43 | # __cache_version__ = "123" | ||
44 | __cache_version__ = "124" # changes the __depends structure | ||
45 | |||
46 | class Cache: | ||
47 | """ | ||
48 | BitBake Cache implementation | ||
49 | """ | ||
50 | def __init__(self, cooker): | ||
51 | |||
52 | |||
53 | self.cachedir = bb.data.getVar("CACHE", cooker.configuration.data, True) | ||
54 | self.clean = {} | ||
55 | self.depends_cache = {} | ||
56 | self.data = None | ||
57 | self.data_fn = None | ||
58 | |||
59 | if self.cachedir in [None, '']: | ||
60 | self.has_cache = False | ||
61 | if cooker.cb is not None: | ||
62 | print "NOTE: Not using a cache. Set CACHE = <directory> to enable." | ||
63 | else: | ||
64 | self.has_cache = True | ||
65 | self.cachefile = os.path.join(self.cachedir,"bb_cache.dat") | ||
66 | |||
67 | if cooker.cb is not None: | ||
68 | print "NOTE: Using cache in '%s'" % self.cachedir | ||
69 | try: | ||
70 | os.stat( self.cachedir ) | ||
71 | except OSError: | ||
72 | bb.mkdirhier( self.cachedir ) | ||
73 | |||
74 | if self.has_cache and (self.mtime(self.cachefile)): | ||
75 | try: | ||
76 | p = pickle.Unpickler( file(self.cachefile,"rb")) | ||
77 | self.depends_cache, version_data = p.load() | ||
78 | if version_data['CACHE_VER'] != __cache_version__: | ||
79 | raise ValueError, 'Cache Version Mismatch' | ||
80 | if version_data['BITBAKE_VER'] != bb.__version__: | ||
81 | raise ValueError, 'Bitbake Version Mismatch' | ||
82 | except (ValueError, KeyError): | ||
83 | bb.note("Invalid cache found, rebuilding...") | ||
84 | self.depends_cache = {} | ||
85 | |||
86 | if self.depends_cache: | ||
87 | for fn in self.depends_cache.keys(): | ||
88 | self.clean[fn] = "" | ||
89 | self.cacheValidUpdate(fn) | ||
90 | |||
91 | def getVar(self, var, fn, exp = 0): | ||
92 | """ | ||
93 | Gets the value of a variable | ||
94 | (similar to getVar in the data class) | ||
95 | |||
96 | There are two scenarios: | ||
97 | 1. We have cached data - serve from depends_cache[fn] | ||
98 | 2. We're learning what data to cache - serve from data | ||
99 | backend but add a copy of the data to the cache. | ||
100 | """ | ||
101 | |||
102 | if fn in self.clean: | ||
103 | return self.depends_cache[fn][var] | ||
104 | |||
105 | if not fn in self.depends_cache: | ||
106 | self.depends_cache[fn] = {} | ||
107 | |||
108 | if fn != self.data_fn: | ||
109 | # We're trying to access data in the cache which doesn't exist | ||
110 | # yet setData hasn't been called to setup the right access. Very bad. | ||
111 | bb.error("Parsing error data_fn %s and fn %s don't match" % (self.data_fn, fn)) | ||
112 | |||
113 | result = bb.data.getVar(var, self.data, exp) | ||
114 | self.depends_cache[fn][var] = result | ||
115 | return result | ||
116 | |||
117 | def setData(self, fn, data): | ||
118 | """ | ||
119 | Called to prime bb_cache ready to learn which variables to cache. | ||
120 | Will be followed by calls to self.getVar which aren't cached | ||
121 | but can be fulfilled from self.data. | ||
122 | """ | ||
123 | self.data_fn = fn | ||
124 | self.data = data | ||
125 | |||
126 | # Make sure __depends makes the depends_cache | ||
127 | self.getVar("__depends", fn, True) | ||
128 | self.depends_cache[fn]["CACHETIMESTAMP"] = bb.parse.cached_mtime(fn) | ||
129 | |||
130 | def loadDataFull(self, fn, cooker): | ||
131 | """ | ||
132 | Return a complete set of data for fn. | ||
133 | To do this, we need to parse the file. | ||
134 | """ | ||
135 | bb_data, skipped = self.load_bbfile(fn, cooker) | ||
136 | return bb_data | ||
137 | |||
138 | def loadData(self, fn, cooker): | ||
139 | """ | ||
140 | Load a subset of data for fn. | ||
141 | If the cached data is valid we do nothing, | ||
142 | To do this, we need to parse the file and set the system | ||
143 | to record the variables accessed. | ||
144 | Return the cache status and whether the file was skipped when parsed | ||
145 | """ | ||
146 | if self.cacheValid(fn): | ||
147 | if "SKIPPED" in self.depends_cache[fn]: | ||
148 | return True, True | ||
149 | return True, False | ||
150 | |||
151 | bb_data, skipped = self.load_bbfile(fn, cooker) | ||
152 | self.setData(fn, bb_data) | ||
153 | return False, skipped | ||
154 | |||
155 | def cacheValid(self, fn): | ||
156 | """ | ||
157 | Is the cache valid for fn? | ||
158 | Fast version, no timestamps checked. | ||
159 | """ | ||
160 | # Is cache enabled? | ||
161 | if not self.has_cache: | ||
162 | return False | ||
163 | if fn in self.clean: | ||
164 | return True | ||
165 | return False | ||
166 | |||
167 | def cacheValidUpdate(self, fn): | ||
168 | """ | ||
169 | Is the cache valid for fn? | ||
170 | Make thorough (slower) checks including timestamps. | ||
171 | """ | ||
172 | # Is cache enabled? | ||
173 | if not self.has_cache: | ||
174 | return False | ||
175 | |||
176 | # Check file still exists | ||
177 | if self.mtime(fn) == 0: | ||
178 | bb.debug(2, "Cache: %s not longer exists" % fn) | ||
179 | self.remove(fn) | ||
180 | return False | ||
181 | |||
182 | # File isn't in depends_cache | ||
183 | if not fn in self.depends_cache: | ||
184 | bb.debug(2, "Cache: %s is not cached" % fn) | ||
185 | self.remove(fn) | ||
186 | return False | ||
187 | |||
188 | # Check the file's timestamp | ||
189 | if bb.parse.cached_mtime(fn) > self.getVar("CACHETIMESTAMP", fn, True): | ||
190 | bb.debug(2, "Cache: %s changed" % fn) | ||
191 | self.remove(fn) | ||
192 | return False | ||
193 | |||
194 | # Check dependencies are still valid | ||
195 | depends = self.getVar("__depends", fn, True) | ||
196 | for f,old_mtime in depends: | ||
197 | new_mtime = bb.parse.cached_mtime(f) | ||
198 | if (new_mtime > old_mtime): | ||
199 | bb.debug(2, "Cache: %s's dependency %s changed" % (fn, f)) | ||
200 | self.remove(fn) | ||
201 | return False | ||
202 | |||
203 | bb.debug(2, "Depends Cache: %s is clean" % fn) | ||
204 | if not fn in self.clean: | ||
205 | self.clean[fn] = "" | ||
206 | |||
207 | return True | ||
208 | |||
209 | def skip(self, fn): | ||
210 | """ | ||
211 | Mark a fn as skipped | ||
212 | Called from the parser | ||
213 | """ | ||
214 | if not fn in self.depends_cache: | ||
215 | self.depends_cache[fn] = {} | ||
216 | self.depends_cache[fn]["SKIPPED"] = "1" | ||
217 | |||
218 | def remove(self, fn): | ||
219 | """ | ||
220 | Remove a fn from the cache | ||
221 | Called from the parser in error cases | ||
222 | """ | ||
223 | bb.debug(1, "Removing %s from cache" % fn) | ||
224 | if fn in self.depends_cache: | ||
225 | del self.depends_cache[fn] | ||
226 | if fn in self.clean: | ||
227 | del self.clean[fn] | ||
228 | |||
229 | def sync(self): | ||
230 | """ | ||
231 | Save the cache | ||
232 | Called from the parser when complete (or exitting) | ||
233 | """ | ||
234 | |||
235 | if not self.has_cache: | ||
236 | return | ||
237 | |||
238 | version_data = {} | ||
239 | version_data['CACHE_VER'] = __cache_version__ | ||
240 | version_data['BITBAKE_VER'] = bb.__version__ | ||
241 | |||
242 | p = pickle.Pickler(file(self.cachefile, "wb" ), -1 ) | ||
243 | p.dump([self.depends_cache, version_data]) | ||
244 | |||
245 | def mtime(self, cachefile): | ||
246 | try: | ||
247 | return os.stat(cachefile)[8] | ||
248 | except OSError: | ||
249 | return 0 | ||
250 | |||
251 | def load_bbfile( self, bbfile , cooker): | ||
252 | """ | ||
253 | Load and parse one .bb build file | ||
254 | Return the data and whether parsing resulted in the file being skipped | ||
255 | """ | ||
256 | |||
257 | import bb | ||
258 | from bb import utils, data, parse, debug, event, fatal | ||
259 | |||
260 | topdir = data.getVar('TOPDIR', cooker.configuration.data) | ||
261 | if not topdir: | ||
262 | topdir = os.path.abspath(os.getcwd()) | ||
263 | # set topdir to here | ||
264 | data.setVar('TOPDIR', topdir, cooker.configuration) | ||
265 | bbfile = os.path.abspath(bbfile) | ||
266 | bbfile_loc = os.path.abspath(os.path.dirname(bbfile)) | ||
267 | # expand tmpdir to include this topdir | ||
268 | data.setVar('TMPDIR', data.getVar('TMPDIR', cooker.configuration.data, 1) or "", cooker.configuration.data) | ||
269 | # set topdir to location of .bb file | ||
270 | topdir = bbfile_loc | ||
271 | #data.setVar('TOPDIR', topdir, cfg) | ||
272 | # go there | ||
273 | oldpath = os.path.abspath(os.getcwd()) | ||
274 | if self.mtime(topdir): | ||
275 | os.chdir(topdir) | ||
276 | bb_data = data.init_db(cooker.configuration.data) | ||
277 | try: | ||
278 | parse.handle(bbfile, bb_data) # read .bb data | ||
279 | os.chdir(oldpath) | ||
280 | return bb_data, False | ||
281 | except bb.parse.SkipPackage: | ||
282 | os.chdir(oldpath) | ||
283 | return bb_data, True | ||
284 | except: | ||
285 | os.chdir(oldpath) | ||
286 | raise | ||
287 | |||
288 | def init(cooker): | ||
289 | """ | ||
290 | The Objective: Cache the minimum amount of data possible yet get to the | ||
291 | stage of building packages (i.e. tryBuild) without reparsing any .bb files. | ||
292 | |||
293 | To do this, we intercept getVar calls and only cache the variables we see | ||
294 | being accessed. We rely on the cache getVar calls being made for all | ||
295 | variables bitbake might need to use to reach this stage. For each cached | ||
296 | file we need to track: | ||
297 | |||
298 | * Its mtime | ||
299 | * The mtimes of all its dependencies | ||
300 | * Whether it caused a parse.SkipPackage exception | ||
301 | |||
302 | Files causing parsing errors are evicted from the cache. | ||
303 | |||
304 | """ | ||
305 | return Cache(cooker) | ||
306 | |||
diff --git a/bitbake/lib/bb/data.py b/bitbake/lib/bb/data.py index 56ee977f66..55d1cc9053 100644 --- a/bitbake/lib/bb/data.py +++ b/bitbake/lib/bb/data.py | |||
@@ -7,6 +7,18 @@ BitBake 'Data' implementations | |||
7 | Functions for interacting with the data structure used by the | 7 | Functions for interacting with the data structure used by the |
8 | BitBake build tools. | 8 | BitBake build tools. |
9 | 9 | ||
10 | The expandData and update_data are the most expensive | ||
11 | operations. At night the cookie monster came by and | ||
12 | suggested 'give me cookies on setting the variables and | ||
13 | things will work out'. Taking this suggestion into account | ||
14 | applying the skills from the not yet passed 'Entwurf und | ||
15 | Analyse von Algorithmen' lecture and the cookie | ||
16 | monster seems to be right. We will track setVar more carefully | ||
17 | to have faster update_data and expandKeys operations. | ||
18 | |||
19 | This is a treade-off between speed and memory again but | ||
20 | the speed is more critical here. | ||
21 | |||
10 | Copyright (C) 2003, 2004 Chris Larson | 22 | Copyright (C) 2003, 2004 Chris Larson |
11 | Copyright (C) 2005 Holger Hans Peter Freyther | 23 | Copyright (C) 2005 Holger Hans Peter Freyther |
12 | 24 | ||
@@ -36,88 +48,15 @@ sys.path.insert(0,path) | |||
36 | from bb import note, debug, data_smart | 48 | from bb import note, debug, data_smart |
37 | 49 | ||
38 | _dict_type = data_smart.DataSmart | 50 | _dict_type = data_smart.DataSmart |
39 | _dict_p_type = data_smart.DataSmartPackage | ||
40 | |||
41 | class DataDictFull(dict): | ||
42 | """ | ||
43 | This implements our Package Data Storage Interface. | ||
44 | setDirty is a no op as all items are held in memory | ||
45 | """ | ||
46 | def setDirty(self, bbfile, data): | ||
47 | """ | ||
48 | No-Op we assume data was manipulated as some sort of | ||
49 | reference | ||
50 | """ | ||
51 | if not bbfile in self: | ||
52 | raise Exception("File %s was not in dictionary before" % bbfile) | ||
53 | |||
54 | self[bbfile] = data | ||
55 | |||
56 | class DataDictCache: | ||
57 | """ | ||
58 | Databacked Dictionary implementation | ||
59 | """ | ||
60 | def __init__(self, cache_dir, config): | ||
61 | self.cache_dir = cache_dir | ||
62 | self.files = [] | ||
63 | self.dirty = {} | ||
64 | self.config = config | ||
65 | |||
66 | def has_key(self,key): | ||
67 | return key in self.files | ||
68 | |||
69 | def keys(self): | ||
70 | return self.files | ||
71 | |||
72 | def __setitem__(self, key, data): | ||
73 | """ | ||
74 | Add the key to the list of known files and | ||
75 | place the data in the cache? | ||
76 | """ | ||
77 | if key in self.files: | ||
78 | return | ||
79 | |||
80 | self.files.append(key) | ||
81 | |||
82 | def __getitem__(self, key): | ||
83 | if not key in self.files: | ||
84 | return None | ||
85 | |||
86 | # if it was dirty we will | ||
87 | if key in self.dirty: | ||
88 | return self.dirty[key] | ||
89 | |||
90 | # not cached yet | ||
91 | return _dict_p_type(self.cache_dir, key,False,self.config) | ||
92 | |||
93 | def setDirty(self, bbfile, data): | ||
94 | """ | ||
95 | Only already added items can be declared dirty!!! | ||
96 | """ | ||
97 | |||
98 | if not bbfile in self.files: | ||
99 | raise Exception("File %s was not in dictionary before" % bbfile) | ||
100 | |||
101 | self.dirty[bbfile] = data | ||
102 | |||
103 | |||
104 | 51 | ||
105 | def init(): | 52 | def init(): |
106 | return _dict_type() | 53 | return _dict_type() |
107 | 54 | ||
108 | def init_db(cache,name,clean,parent = None): | 55 | def init_db(parent = None): |
109 | return _dict_p_type(cache,name,clean,parent) | 56 | if parent: |
110 | 57 | return parent.createCopy() | |
111 | def init_db_mtime(cache,cache_bbfile): | 58 | else: |
112 | return _dict_p_type.mtime(cache,cache_bbfile) | 59 | return _dict_type() |
113 | |||
114 | def pkgdata(use_cache, cache, config = None): | ||
115 | """ | ||
116 | Return some sort of dictionary to lookup parsed dictionaires | ||
117 | """ | ||
118 | if use_cache: | ||
119 | return DataDictCache(cache, config) | ||
120 | return DataDictFull() | ||
121 | 60 | ||
122 | def createCopy(source): | 61 | def createCopy(source): |
123 | """Link the source set to the destination | 62 | """Link the source set to the destination |
@@ -273,6 +212,27 @@ def setData(newData, d): | |||
273 | """Sets the data object to the supplied value""" | 212 | """Sets the data object to the supplied value""" |
274 | d = newData | 213 | d = newData |
275 | 214 | ||
215 | |||
216 | ## | ||
217 | ## Cookie Monsters' query functions | ||
218 | ## | ||
219 | def _get_override_vars(d, override): | ||
220 | """ | ||
221 | Internal!!! | ||
222 | |||
223 | Get the Names of Variables that have a specific | ||
224 | override. This function returns a iterable | ||
225 | Set or an empty list | ||
226 | """ | ||
227 | return [] | ||
228 | |||
229 | def _get_var_flags_triple(d): | ||
230 | """ | ||
231 | Internal!!! | ||
232 | |||
233 | """ | ||
234 | return [] | ||
235 | |||
276 | __expand_var_regexp__ = re.compile(r"\${[^{}]+}") | 236 | __expand_var_regexp__ = re.compile(r"\${[^{}]+}") |
277 | __expand_python_regexp__ = re.compile(r"\${@.+?}") | 237 | __expand_python_regexp__ = re.compile(r"\${@.+?}") |
278 | 238 | ||
@@ -303,43 +263,7 @@ def expand(s, d, varname = None): | |||
303 | >>> print expand('${SRC_URI}', d) | 263 | >>> print expand('${SRC_URI}', d) |
304 | http://somebug.${TARGET_MOO} | 264 | http://somebug.${TARGET_MOO} |
305 | """ | 265 | """ |
306 | def var_sub(match): | 266 | return d.expand(s, varname) |
307 | key = match.group()[2:-1] | ||
308 | if varname and key: | ||
309 | if varname == key: | ||
310 | raise Exception("variable %s references itself!" % varname) | ||
311 | var = getVar(key, d, 1) | ||
312 | if var is not None: | ||
313 | return var | ||
314 | else: | ||
315 | return match.group() | ||
316 | |||
317 | def python_sub(match): | ||
318 | import bb | ||
319 | code = match.group()[3:-1] | ||
320 | locals()['d'] = d | ||
321 | s = eval(code) | ||
322 | if type(s) == types.IntType: s = str(s) | ||
323 | return s | ||
324 | |||
325 | if type(s) is not types.StringType: # sanity check | ||
326 | return s | ||
327 | |||
328 | while s.find('$') != -1: | ||
329 | olds = s | ||
330 | try: | ||
331 | s = __expand_var_regexp__.sub(var_sub, s) | ||
332 | s = __expand_python_regexp__.sub(python_sub, s) | ||
333 | if s == olds: break | ||
334 | if type(s) is not types.StringType: # sanity check | ||
335 | import bb | ||
336 | bb.error('expansion of %s returned non-string %s' % (olds, s)) | ||
337 | except KeyboardInterrupt: | ||
338 | raise | ||
339 | except: | ||
340 | note("%s:%s while evaluating:\n%s" % (sys.exc_info()[0], sys.exc_info()[1], s)) | ||
341 | raise | ||
342 | return s | ||
343 | 267 | ||
344 | def expandKeys(alterdata, readdata = None): | 268 | def expandKeys(alterdata, readdata = None): |
345 | if readdata == None: | 269 | if readdata == None: |
@@ -356,7 +280,7 @@ def expandKeys(alterdata, readdata = None): | |||
356 | # setVarFlags(ekey, copy.copy(getVarFlags(key, readdata)), alterdata) | 280 | # setVarFlags(ekey, copy.copy(getVarFlags(key, readdata)), alterdata) |
357 | setVar(ekey, val, alterdata) | 281 | setVar(ekey, val, alterdata) |
358 | 282 | ||
359 | for i in ('_append', '_prepend', '_delete'): | 283 | for i in ('_append', '_prepend'): |
360 | dest = getVarFlag(ekey, i, alterdata) or [] | 284 | dest = getVarFlag(ekey, i, alterdata) or [] |
361 | src = getVarFlag(key, i, readdata) or [] | 285 | src = getVarFlag(key, i, readdata) or [] |
362 | dest.extend(src) | 286 | dest.extend(src) |
@@ -507,67 +431,76 @@ def update_data(d): | |||
507 | >>> print getVar('TEST', d) | 431 | >>> print getVar('TEST', d) |
508 | local | 432 | local |
509 | """ | 433 | """ |
510 | |||
511 | debug(2, "update_data()") | 434 | debug(2, "update_data()") |
512 | 435 | ||
513 | # can't do delete env[...] while iterating over the dictionary, so remember them | 436 | # now ask the cookie monster for help |
514 | dodel = [] | 437 | #print "Cookie Monster" |
438 | #print "Append/Prepend %s" % d._special_values | ||
439 | #print "Overrides %s" % d._seen_overrides | ||
440 | |||
515 | overrides = (getVar('OVERRIDES', d, 1) or "").split(':') or [] | 441 | overrides = (getVar('OVERRIDES', d, 1) or "").split(':') or [] |
516 | 442 | ||
517 | def applyOverrides(var, d): | 443 | # |
518 | if not overrides: | 444 | # Well let us see what breaks here. We used to iterate |
519 | debug(1, "OVERRIDES not defined, nothing to do") | 445 | # over each variable and apply the override and then |
520 | return | 446 | # do the line expanding. |
521 | val = getVar(var, d) | 447 | # If we have bad luck - which we will have - the keys |
522 | for o in overrides: | 448 | # where in some order that is so important for this |
523 | if var.endswith("_" + o): | 449 | # method which we don't have anymore. |
524 | l = len(o)+1 | 450 | # Anyway we will fix that and write test cases this |
525 | name = var[:-l] | 451 | # time. |
526 | d[name] = d[var] | 452 | |
453 | # | ||
454 | # First we apply all overrides | ||
455 | # Then we will handle _append and _prepend | ||
456 | # | ||
457 | |||
458 | for o in overrides: | ||
459 | # calculate '_'+override | ||
460 | l = len(o)+1 | ||
461 | |||
462 | # see if one should even try | ||
463 | if not o in d._seen_overrides: | ||
464 | continue | ||
527 | 465 | ||
528 | for s in keys(d): | 466 | vars = d._seen_overrides[o] |
529 | applyOverrides(s, d) | 467 | for var in vars: |
530 | sval = getVar(s, d) or "" | 468 | name = var[:-l] |
531 | 469 | try: | |
532 | # Handle line appends: | 470 | d[name] = d[var] |
533 | for (a, o) in getVarFlag(s, '_append', d) or []: | 471 | except: |
534 | # maybe the OVERRIDE was not yet added so keep the append | 472 | note ("Untracked delVar") |
535 | if (o and o in overrides) or not o: | 473 | |
536 | delVarFlag(s, '_append', d) | 474 | # now on to the appends and prepends |
537 | if o: | 475 | if '_append' in d._special_values: |
538 | if not o in overrides: | 476 | appends = d._special_values['_append'] or [] |
477 | for append in appends: | ||
478 | for (a, o) in getVarFlag(append, '_append', d) or []: | ||
479 | # maybe the OVERRIDE was not yet added so keep the append | ||
480 | if (o and o in overrides) or not o: | ||
481 | delVarFlag(append, '_append', d) | ||
482 | if o and not o in overrides: | ||
539 | continue | 483 | continue |
540 | sval+=a | 484 | |
541 | setVar(s, sval, d) | 485 | sval = getVar(append,d) or "" |
542 | 486 | sval+=a | |
543 | # Handle line prepends | 487 | setVar(append, sval, d) |
544 | for (a, o) in getVarFlag(s, '_prepend', d) or []: | 488 | |
545 | # maybe the OVERRIDE was not yet added so keep the append | 489 | |
546 | if (o and o in overrides) or not o: | 490 | if '_prepend' in d._special_values: |
547 | delVarFlag(s, '_prepend', d) | 491 | prepends = d._special_values['_prepend'] or [] |
548 | if o: | 492 | |
549 | if not o in overrides: | 493 | for prepend in prepends: |
494 | for (a, o) in getVarFlag(prepend, '_prepend', d) or []: | ||
495 | # maybe the OVERRIDE was not yet added so keep the prepend | ||
496 | if (o and o in overrides) or not o: | ||
497 | delVarFlag(prepend, '_prepend', d) | ||
498 | if o and not o in overrides: | ||
550 | continue | 499 | continue |
551 | sval=a+sval | 500 | |
552 | setVar(s, sval, d) | 501 | sval = a + (getVar(prepend,d) or "") |
553 | 502 | setVar(prepend, sval, d) | |
554 | # Handle line deletions | 503 | |
555 | name = s + "_delete" | ||
556 | nameval = getVar(name, d) | ||
557 | if nameval: | ||
558 | sval = getVar(s, d) | ||
559 | if sval: | ||
560 | new = '' | ||
561 | pattern = nameval.replace('\n','').strip() | ||
562 | for line in sval.split('\n'): | ||
563 | if line.find(pattern) == -1: | ||
564 | new = new + '\n' + line | ||
565 | setVar(s, new, d) | ||
566 | dodel.append(name) | ||
567 | |||
568 | # delete all environment vars no longer needed | ||
569 | for s in dodel: | ||
570 | delVar(s, d) | ||
571 | 504 | ||
572 | def inherits_class(klass, d): | 505 | def inherits_class(klass, d): |
573 | val = getVar('__inherit_cache', d) or "" | 506 | val = getVar('__inherit_cache', d) or "" |
diff --git a/bitbake/lib/bb/data_smart.py b/bitbake/lib/bb/data_smart.py index 52f391dec1..fbd4167fe4 100644 --- a/bitbake/lib/bb/data_smart.py +++ b/bitbake/lib/bb/data_smart.py | |||
@@ -8,7 +8,7 @@ BitBake build tools. | |||
8 | 8 | ||
9 | Copyright (C) 2003, 2004 Chris Larson | 9 | Copyright (C) 2003, 2004 Chris Larson |
10 | Copyright (C) 2004, 2005 Seb Frankengul | 10 | Copyright (C) 2004, 2005 Seb Frankengul |
11 | Copyright (C) 2005 Holger Hans Peter Freyther | 11 | Copyright (C) 2005, 2006 Holger Hans Peter Freyther |
12 | Copyright (C) 2005 Uli Luckas | 12 | Copyright (C) 2005 Uli Luckas |
13 | Copyright (C) 2005 ROAD GmbH | 13 | Copyright (C) 2005 ROAD GmbH |
14 | 14 | ||
@@ -29,7 +29,8 @@ Based on functions from the base bb module, Copyright 2003 Holger Schurig | |||
29 | """ | 29 | """ |
30 | 30 | ||
31 | import copy, os, re, sys, time, types | 31 | import copy, os, re, sys, time, types |
32 | from bb import note, debug, fatal, utils | 32 | from bb import note, debug, error, fatal, utils, methodpool |
33 | from sets import Set | ||
33 | 34 | ||
34 | try: | 35 | try: |
35 | import cPickle as pickle | 36 | import cPickle as pickle |
@@ -37,9 +38,8 @@ except ImportError: | |||
37 | import pickle | 38 | import pickle |
38 | print "NOTE: Importing cPickle failed. Falling back to a very slow implementation." | 39 | print "NOTE: Importing cPickle failed. Falling back to a very slow implementation." |
39 | 40 | ||
40 | 41 | __setvar_keyword__ = ["_append","_prepend"] | |
41 | __setvar_keyword__ = ["_append","_prepend","_delete"] | 42 | __setvar_regexp__ = re.compile('(?P<base>.*?)(?P<keyword>_append|_prepend)(_(?P<add>.*))?') |
42 | __setvar_regexp__ = re.compile('(?P<base>.*?)(?P<keyword>_append|_prepend|_delete)(_(?P<add>.*))?') | ||
43 | __expand_var_regexp__ = re.compile(r"\${[^{}]+}") | 43 | __expand_var_regexp__ = re.compile(r"\${[^{}]+}") |
44 | __expand_python_regexp__ = re.compile(r"\${@.+?}") | 44 | __expand_python_regexp__ = re.compile(r"\${@.+?}") |
45 | 45 | ||
@@ -48,6 +48,10 @@ class DataSmart: | |||
48 | def __init__(self): | 48 | def __init__(self): |
49 | self.dict = {} | 49 | self.dict = {} |
50 | 50 | ||
51 | # cookie monster tribute | ||
52 | self._special_values = {} | ||
53 | self._seen_overrides = {} | ||
54 | |||
51 | def expand(self,s, varname): | 55 | def expand(self,s, varname): |
52 | def var_sub(match): | 56 | def var_sub(match): |
53 | key = match.group()[2:-1] | 57 | key = match.group()[2:-1] |
@@ -78,8 +82,7 @@ class DataSmart: | |||
78 | s = __expand_python_regexp__.sub(python_sub, s) | 82 | s = __expand_python_regexp__.sub(python_sub, s) |
79 | if s == olds: break | 83 | if s == olds: break |
80 | if type(s) is not types.StringType: # sanity check | 84 | if type(s) is not types.StringType: # sanity check |
81 | import bb | 85 | error('expansion of %s returned non-string %s' % (olds, s)) |
82 | bb.error('expansion of %s returned non-string %s' % (olds, s)) | ||
83 | except KeyboardInterrupt: | 86 | except KeyboardInterrupt: |
84 | raise | 87 | raise |
85 | except: | 88 | except: |
@@ -91,18 +94,6 @@ class DataSmart: | |||
91 | if not var in self.dict: | 94 | if not var in self.dict: |
92 | self.dict[var] = {} | 95 | self.dict[var] = {} |
93 | 96 | ||
94 | def pickle_prep(self, cfg): | ||
95 | if "_data" in self.dict: | ||
96 | if self.dict["_data"] == cfg: | ||
97 | self.dict["_data"] = "cfg"; | ||
98 | else: # this is an unknown array for the moment | ||
99 | pass | ||
100 | |||
101 | def unpickle_prep(self, cfg): | ||
102 | if "_data" in self.dict: | ||
103 | if self.dict["_data"] == "cfg": | ||
104 | self.dict["_data"] = cfg; | ||
105 | |||
106 | def _findVar(self,var): | 97 | def _findVar(self,var): |
107 | _dest = self.dict | 98 | _dest = self.dict |
108 | 99 | ||
@@ -116,14 +107,6 @@ class DataSmart: | |||
116 | return _dest[var] | 107 | return _dest[var] |
117 | return None | 108 | return None |
118 | 109 | ||
119 | def _copyVar(self,var,name): | ||
120 | local_var = self._findVar(var) | ||
121 | if local_var: | ||
122 | self.dict[name] = copy.copy(local_var) | ||
123 | else: | ||
124 | debug(1,"Warning, _copyVar %s to %s, %s does not exists" % (var,name,var)) | ||
125 | |||
126 | |||
127 | def _makeShadowCopy(self, var): | 110 | def _makeShadowCopy(self, var): |
128 | if var in self.dict: | 111 | if var in self.dict: |
129 | return | 112 | return |
@@ -142,11 +125,20 @@ class DataSmart: | |||
142 | keyword = match.group("keyword") | 125 | keyword = match.group("keyword") |
143 | override = match.group('add') | 126 | override = match.group('add') |
144 | l = self.getVarFlag(base, keyword) or [] | 127 | l = self.getVarFlag(base, keyword) or [] |
145 | if override == 'delete': | ||
146 | if l.count([value, None]): | ||
147 | del l[l.index([value, None])] | ||
148 | l.append([value, override]) | 128 | l.append([value, override]) |
149 | self.setVarFlag(base, match.group("keyword"), l) | 129 | self.setVarFlag(base, keyword, l) |
130 | |||
131 | # pay the cookie monster | ||
132 | try: | ||
133 | self._special_values[keyword].add( base ) | ||
134 | except: | ||
135 | self._special_values[keyword] = Set() | ||
136 | self._special_values[keyword].add( base ) | ||
137 | |||
138 | # SRC_URI_append_simpad is both a flag and a override | ||
139 | #if not override in self._seen_overrides: | ||
140 | # self._seen_overrides[override] = Set() | ||
141 | #self._seen_overrides[override].add( base ) | ||
150 | return | 142 | return |
151 | 143 | ||
152 | if not var in self.dict: | 144 | if not var in self.dict: |
@@ -155,6 +147,13 @@ class DataSmart: | |||
155 | self.delVarFlag(var, 'matchesenv') | 147 | self.delVarFlag(var, 'matchesenv') |
156 | self.setVarFlag(var, 'export', 1) | 148 | self.setVarFlag(var, 'export', 1) |
157 | 149 | ||
150 | # more cookies for the cookie monster | ||
151 | if '_' in var: | ||
152 | override = var[var.rfind('_')+1:] | ||
153 | if not override in self._seen_overrides: | ||
154 | self._seen_overrides[override] = Set() | ||
155 | self._seen_overrides[override].add( var ) | ||
156 | |||
158 | # setting var | 157 | # setting var |
159 | self.dict[var]["content"] = value | 158 | self.dict[var]["content"] = value |
160 | 159 | ||
@@ -237,6 +236,8 @@ class DataSmart: | |||
237 | # we really want this to be a DataSmart... | 236 | # we really want this to be a DataSmart... |
238 | data = DataSmart() | 237 | data = DataSmart() |
239 | data.dict["_data"] = self.dict | 238 | data.dict["_data"] = self.dict |
239 | data._seen_overrides = copy.deepcopy(self._seen_overrides) | ||
240 | data._special_values = copy.deepcopy(self._special_values) | ||
240 | 241 | ||
241 | return data | 242 | return data |
242 | 243 | ||
@@ -254,98 +255,11 @@ class DataSmart: | |||
254 | return keytab.keys() | 255 | return keytab.keys() |
255 | 256 | ||
256 | def __getitem__(self,item): | 257 | def __getitem__(self,item): |
257 | start = self.dict | 258 | #print "Warning deprecated" |
258 | while start: | 259 | return self.getVar(item, False) |
259 | if item in start: | ||
260 | return start[item] | ||
261 | elif "_data" in start: | ||
262 | start = start["_data"] | ||
263 | else: | ||
264 | start = None | ||
265 | return None | ||
266 | 260 | ||
267 | def __setitem__(self,var,data): | 261 | def __setitem__(self,var,data): |
268 | self._makeShadowCopy(var) | 262 | #print "Warning deprecated" |
269 | self.dict[var] = data | 263 | self.setVar(var,data) |
270 | |||
271 | |||
272 | class DataSmartPackage(DataSmart): | ||
273 | """ | ||
274 | Persistent Data Storage | ||
275 | """ | ||
276 | def sanitize_filename(bbfile): | ||
277 | return bbfile.replace( '/', '_' ) | ||
278 | sanitize_filename = staticmethod(sanitize_filename) | ||
279 | 264 | ||
280 | def unpickle(self): | ||
281 | """ | ||
282 | Restore the dict from memory | ||
283 | """ | ||
284 | cache_bbfile = self.sanitize_filename(self.bbfile) | ||
285 | p = pickle.Unpickler( file("%s/%s"%(self.cache,cache_bbfile),"rb")) | ||
286 | self.dict = p.load() | ||
287 | self.unpickle_prep() | ||
288 | funcstr = self.getVar('__functions__', 0) | ||
289 | if funcstr: | ||
290 | comp = utils.better_compile(funcstr, "<pickled>", self.bbfile) | ||
291 | utils.better_exec(comp, __builtins__, funcstr, self.bbfile) | ||
292 | |||
293 | def linkDataSet(self): | ||
294 | if not self.parent == None: | ||
295 | # assume parent is a DataSmartInstance | ||
296 | self.dict["_data"] = self.parent.dict | ||
297 | |||
298 | |||
299 | def __init__(self,cache,name,clean,parent): | ||
300 | """ | ||
301 | Construct a persistent data instance | ||
302 | """ | ||
303 | #Initialize the dictionary | ||
304 | DataSmart.__init__(self) | ||
305 | |||
306 | self.cache = cache | ||
307 | self.bbfile = os.path.abspath( name ) | ||
308 | self.parent = parent | ||
309 | |||
310 | # Either unpickle the data or do copy on write | ||
311 | if clean: | ||
312 | self.linkDataSet() | ||
313 | else: | ||
314 | self.unpickle() | ||
315 | |||
316 | def commit(self, mtime): | ||
317 | """ | ||
318 | Save the package to a permanent storage | ||
319 | """ | ||
320 | self.pickle_prep() | ||
321 | |||
322 | cache_bbfile = self.sanitize_filename(self.bbfile) | ||
323 | p = pickle.Pickler(file("%s/%s" %(self.cache,cache_bbfile), "wb" ), -1 ) | ||
324 | p.dump( self.dict ) | ||
325 | |||
326 | self.unpickle_prep() | ||
327 | 265 | ||
328 | def mtime(cache,bbfile): | ||
329 | cache_bbfile = DataSmartPackage.sanitize_filename(bbfile) | ||
330 | try: | ||
331 | return os.stat( "%s/%s" % (cache,cache_bbfile) )[8] | ||
332 | except OSError: | ||
333 | return 0 | ||
334 | mtime = staticmethod(mtime) | ||
335 | |||
336 | def pickle_prep(self): | ||
337 | """ | ||
338 | If self.dict contains a _data key and it is a configuration | ||
339 | we will remember we had a configuration instance attached | ||
340 | """ | ||
341 | if "_data" in self.dict: | ||
342 | if self.dict["_data"] == self.parent: | ||
343 | dest["_data"] = "cfg" | ||
344 | |||
345 | def unpickle_prep(self): | ||
346 | """ | ||
347 | If we had a configuration instance attached, we will reattach it | ||
348 | """ | ||
349 | if "_data" in self.dict: | ||
350 | if self.dict["_data"] == "cfg": | ||
351 | self.dict["_data"] = self.parent | ||
diff --git a/bitbake/lib/bb/event.py b/bitbake/lib/bb/event.py index cbe6d2a11a..b1d12177c4 100644 --- a/bitbake/lib/bb/event.py +++ b/bitbake/lib/bb/event.py | |||
@@ -44,7 +44,13 @@ class Event: | |||
44 | 44 | ||
45 | NotHandled = 0 | 45 | NotHandled = 0 |
46 | Handled = 1 | 46 | Handled = 1 |
47 | handlers = [] | 47 | |
48 | Registered = 10 | ||
49 | AlreadyRegistered = 14 | ||
50 | |||
51 | # Internal | ||
52 | _handlers = [] | ||
53 | _handlers_dict = {} | ||
48 | 54 | ||
49 | def tmpHandler(event): | 55 | def tmpHandler(event): |
50 | """Default handler for code events""" | 56 | """Default handler for code events""" |
@@ -57,7 +63,7 @@ def defaultTmpHandler(): | |||
57 | 63 | ||
58 | def fire(event): | 64 | def fire(event): |
59 | """Fire off an Event""" | 65 | """Fire off an Event""" |
60 | for h in handlers: | 66 | for h in _handlers: |
61 | if type(h).__name__ == "code": | 67 | if type(h).__name__ == "code": |
62 | exec(h) | 68 | exec(h) |
63 | if tmpHandler(event) == Handled: | 69 | if tmpHandler(event) == Handled: |
@@ -67,15 +73,22 @@ def fire(event): | |||
67 | return Handled | 73 | return Handled |
68 | return NotHandled | 74 | return NotHandled |
69 | 75 | ||
70 | def register(handler): | 76 | def register(name, handler): |
71 | """Register an Event handler""" | 77 | """Register an Event handler""" |
78 | |||
79 | # already registered | ||
80 | if name in _handlers_dict: | ||
81 | return AlreadyRegistered | ||
82 | |||
72 | if handler is not None: | 83 | if handler is not None: |
73 | # handle string containing python code | 84 | # handle string containing python code |
74 | if type(handler).__name__ == "str": | 85 | if type(handler).__name__ == "str": |
75 | return _registerCode(handler) | 86 | _registerCode(handler) |
76 | # prevent duplicate registration | 87 | else: |
77 | if not handler in handlers: | 88 | _handlers.append(handler) |
78 | handlers.append(handler) | 89 | |
90 | _handlers_dict[name] = 1 | ||
91 | return Registered | ||
79 | 92 | ||
80 | def _registerCode(handlerStr): | 93 | def _registerCode(handlerStr): |
81 | """Register a 'code' Event. | 94 | """Register a 'code' Event. |
@@ -88,24 +101,23 @@ def _registerCode(handlerStr): | |||
88 | tmp = "def tmpHandler(e):\n%s" % handlerStr | 101 | tmp = "def tmpHandler(e):\n%s" % handlerStr |
89 | comp = bb.utils.better_compile(tmp, "tmpHandler(e)", "bb.event._registerCode") | 102 | comp = bb.utils.better_compile(tmp, "tmpHandler(e)", "bb.event._registerCode") |
90 | # prevent duplicate registration | 103 | # prevent duplicate registration |
91 | if not comp in handlers: | 104 | _handlers.append(comp) |
92 | handlers.append(comp) | ||
93 | 105 | ||
94 | def remove(handler): | 106 | def remove(name, handler): |
95 | """Remove an Event handler""" | 107 | """Remove an Event handler""" |
96 | for h in handlers: | ||
97 | if type(handler).__name__ == "str": | ||
98 | return _removeCode(handler) | ||
99 | 108 | ||
100 | if handler is h: | 109 | _handlers_dict.pop(name) |
101 | handlers.remove(handler) | 110 | if type(handler).__name__ == "str": |
111 | return _removeCode(handler) | ||
112 | else: | ||
113 | _handlers.remove(handler) | ||
102 | 114 | ||
103 | def _removeCode(handlerStr): | 115 | def _removeCode(handlerStr): |
104 | """Remove a 'code' Event handler | 116 | """Remove a 'code' Event handler |
105 | Deprecated interface; call remove instead.""" | 117 | Deprecated interface; call remove instead.""" |
106 | tmp = "def tmpHandler(e):\n%s" % handlerStr | 118 | tmp = "def tmpHandler(e):\n%s" % handlerStr |
107 | comp = bb.utils.better_compile(tmp, "tmpHandler(e)", "bb.event._removeCode") | 119 | comp = bb.utils.better_compile(tmp, "tmpHandler(e)", "bb.event._removeCode") |
108 | handlers.remove(comp) | 120 | _handlers.remove(comp) |
109 | 121 | ||
110 | def getName(e): | 122 | def getName(e): |
111 | """Returns the name of a class or class instance""" | 123 | """Returns the name of a class or class instance""" |
diff --git a/bitbake/lib/bb/fetch/__init__.py b/bitbake/lib/bb/fetch/__init__.py index 0515f2a5e9..ac698a0d1c 100644 --- a/bitbake/lib/bb/fetch/__init__.py +++ b/bitbake/lib/bb/fetch/__init__.py | |||
@@ -168,10 +168,6 @@ class Fetch(object): | |||
168 | d Is a bb.data instance | 168 | d Is a bb.data instance |
169 | tarfn is the name of the tarball | 169 | tarfn is the name of the tarball |
170 | """ | 170 | """ |
171 | tarpath = os.path.join(data.getVar("DL_DIR", d, 1), tarfn) | ||
172 | if os.access(tarpath, os.R_OK): | ||
173 | return True | ||
174 | |||
175 | pn = data.getVar('PN', d, True) | 171 | pn = data.getVar('PN', d, True) |
176 | src_tarball_stash = None | 172 | src_tarball_stash = None |
177 | if pn: | 173 | if pn: |
diff --git a/bitbake/lib/bb/fetch/git.py b/bitbake/lib/bb/fetch/git.py index f30ae2360a..49235c141e 100644 --- a/bitbake/lib/bb/fetch/git.py +++ b/bitbake/lib/bb/fetch/git.py | |||
@@ -129,7 +129,7 @@ class Git(Fetch): | |||
129 | os.chdir(repodir) | 129 | os.chdir(repodir) |
130 | rungitcmd("tar -xzf %s" % (repofile),d) | 130 | rungitcmd("tar -xzf %s" % (repofile),d) |
131 | else: | 131 | else: |
132 | rungitcmd("git clone %s://%s%s %s" % (proto, host, path, repodir),d) | 132 | rungitcmd("git clone -n %s://%s%s %s" % (proto, host, path, repodir),d) |
133 | 133 | ||
134 | os.chdir(repodir) | 134 | os.chdir(repodir) |
135 | rungitcmd("git pull %s://%s%s" % (proto, host, path),d) | 135 | rungitcmd("git pull %s://%s%s" % (proto, host, path),d) |
diff --git a/bitbake/lib/bb/methodpool.py b/bitbake/lib/bb/methodpool.py new file mode 100644 index 0000000000..d7434ed33e --- /dev/null +++ b/bitbake/lib/bb/methodpool.py | |||
@@ -0,0 +1,101 @@ | |||
1 | # ex:ts=4:sw=4:sts=4:et | ||
2 | # -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- | ||
3 | # | ||
4 | # | ||
5 | # Copyright (C) 2006 Holger Hans Peter Freyther | ||
6 | # All rights reserved. | ||
7 | # | ||
8 | # Redistribution and use in source and binary forms, with or without | ||
9 | # modification, are permitted provided that the following conditions are met: | ||
10 | # | ||
11 | # Redistributions of source code must retain the above copyright notice, | ||
12 | # this list of conditions and the following disclaimer. | ||
13 | # | ||
14 | # Redistributions in binary form must reproduce the above copyright | ||
15 | # notice, this list of conditions and the following disclaimer in the | ||
16 | # documentation and/or other materials provided with the distribution. | ||
17 | # | ||
18 | # Neither the name Holger Hans Peter Freyther nor the names of its | ||
19 | # contributors may be used to endorse or promote products derived | ||
20 | # from this software without specific prior written permission. | ||
21 | # | ||
22 | # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||
23 | # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||
24 | # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS | ||
25 | # FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE | ||
26 | # COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, | ||
27 | # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
28 | # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | ||
29 | # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
30 | # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | ||
31 | # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING | ||
32 | # IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | ||
33 | # POSSIBILITY OF SUCH DAMAGE. | ||
34 | |||
35 | |||
36 | """ | ||
37 | What is a method pool? | ||
38 | |||
39 | BitBake has a global method scope where .bb, .inc and .bbclass | ||
40 | files can install methods. These methods are parsed from strings. | ||
41 | To avoid recompiling and executing these string we introduce | ||
42 | a method pool to do this task. | ||
43 | |||
44 | This pool will be used to compile and execute the functions. It | ||
45 | will be smart enough to | ||
46 | """ | ||
47 | |||
48 | from bb.utils import better_compile, better_exec | ||
49 | from bb import error | ||
50 | |||
51 | # A dict of modules we have handled | ||
52 | # it is the number of .bbclasses + x in size | ||
53 | _parsed_methods = { } | ||
54 | _parsed_fns = { } | ||
55 | |||
56 | def insert_method(modulename, code, fn): | ||
57 | """ | ||
58 | Add code of a module should be added. The methods | ||
59 | will be simply added, no checking will be done | ||
60 | """ | ||
61 | comp = better_compile(code, "<bb>", fn ) | ||
62 | better_exec(comp, __builtins__, code, fn) | ||
63 | |||
64 | # hack hack hack XXX | ||
65 | return | ||
66 | |||
67 | # now some instrumentation | ||
68 | code = comp.co_names | ||
69 | for name in code: | ||
70 | if name in ['None', 'False']: | ||
71 | continue | ||
72 | elif name in _parsed_fns and not _parsed_fns[name] == modulename: | ||
73 | error( "Error Method already seen: %s in' %s' now in '%s'" % (name, _parsed_fns[name], modulename)) | ||
74 | else: | ||
75 | _parsed_fns[name] = modulename | ||
76 | |||
77 | def check_insert_method(modulename, code, fn): | ||
78 | """ | ||
79 | Add the code if it wasnt added before. The module | ||
80 | name will be used for that | ||
81 | |||
82 | Variables: | ||
83 | @modulename a short name e.g. base.bbclass | ||
84 | @code The actual python code | ||
85 | @fn The filename from the outer file | ||
86 | """ | ||
87 | if not modulename in _parsed_methods: | ||
88 | return insert_method(modulename, code, fn) | ||
89 | |||
90 | def parsed_module(modulename): | ||
91 | """ | ||
92 | Inform me file xyz was parsed | ||
93 | """ | ||
94 | return modulename in _parsed_methods | ||
95 | |||
96 | |||
97 | def get_parsed_dict(): | ||
98 | """ | ||
99 | shortcut | ||
100 | """ | ||
101 | return _parsed_methods | ||
diff --git a/bitbake/lib/bb/parse/__init__.py b/bitbake/lib/bb/parse/__init__.py index cb27416061..58e17d154a 100644 --- a/bitbake/lib/bb/parse/__init__.py +++ b/bitbake/lib/bb/parse/__init__.py | |||
@@ -46,9 +46,9 @@ def update_mtime(f): | |||
46 | def mark_dependency(d, f): | 46 | def mark_dependency(d, f): |
47 | if f.startswith('./'): | 47 | if f.startswith('./'): |
48 | f = "%s/%s" % (os.getcwd(), f[2:]) | 48 | f = "%s/%s" % (os.getcwd(), f[2:]) |
49 | deps = (bb.data.getVar('__depends', d) or "").split() | 49 | deps = bb.data.getVar('__depends', d) or [] |
50 | deps.append("%s@%s" % (f, cached_mtime(f))) | 50 | deps.append( (f, cached_mtime(f)) ) |
51 | bb.data.setVar('__depends', " ".join(deps), d) | 51 | bb.data.setVar('__depends', deps, d) |
52 | 52 | ||
53 | def supports(fn, data): | 53 | def supports(fn, data): |
54 | """Returns true if we have a handler for this file, false otherwise""" | 54 | """Returns true if we have a handler for this file, false otherwise""" |
diff --git a/bitbake/lib/bb/parse/parse_c/BBHandler.py b/bitbake/lib/bb/parse/parse_c/BBHandler.py index 300871d9e3..d9f48db17b 100644 --- a/bitbake/lib/bb/parse/parse_c/BBHandler.py +++ b/bitbake/lib/bb/parse/parse_c/BBHandler.py | |||
@@ -1,29 +1,42 @@ | |||
1 | # ex:ts=4:sw=4:sts=4:et | 1 | # ex:ts=4:sw=4:sts=4:et |
2 | # -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- | 2 | # -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- |
3 | # | 3 | """class for handling .bb files (using a C++ parser) |
4 | # Copyright (C) 2006 Holger Hans Peter Freyther | 4 | |
5 | # | 5 | Reads a .bb file and obtains its metadata (using a C++ parser) |
6 | # Permission is hereby granted, free of charge, to any person obtaining a copy | 6 | |
7 | # of this software and associated documentation files (the "Software"), to deal | 7 | Copyright (C) 2006 Tim Robert Ansell |
8 | # in the Software without restriction, including without limitation the rights | 8 | Copyright (C) 2006 Holger Hans Peter Freyther |
9 | # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | 9 | |
10 | # copies of the Software, and to permit persons to whom the Software is | 10 | This program is free software; you can redistribute it and/or modify it under |
11 | # furnished to do so, subject to the following conditions: | 11 | the terms of the GNU General Public License as published by the Free Software |
12 | # | 12 | Foundation; either version 2 of the License, or (at your option) any later |
13 | # The above copyright notice and this permission notice shall be included in all | 13 | version. |
14 | # copies or substantial portions of the Software. | ||
15 | # | ||
16 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
17 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
18 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT | ||
19 | # SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, | ||
20 | # DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR | ||
21 | # OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR | ||
22 | # THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
23 | # | ||
24 | 14 | ||
25 | from bb import data | 15 | Permission is hereby granted, free of charge, to any person obtaining a copy |
26 | from bb.parse import ParseError | 16 | of this software and associated documentation files (the "Software"), to deal |
17 | in the Software without restriction, including without limitation the rights | ||
18 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
19 | copies of the Software, and to permit persons to whom the Software is | ||
20 | furnished to do so, subject to the following conditions: | ||
21 | |||
22 | The above copyright notice and this permission notice shall be included in all | ||
23 | copies or substantial portions of the Software. | ||
24 | |||
25 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
26 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
27 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT | ||
28 | SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, | ||
29 | DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR | ||
30 | OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR | ||
31 | THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
32 | """ | ||
33 | |||
34 | import os | ||
35 | |||
36 | # The Module we will use here | ||
37 | import bb | ||
38 | |||
39 | from bitbakec import parsefile | ||
27 | 40 | ||
28 | # | 41 | # |
29 | # This is the Python Part of the Native Parser Implementation. | 42 | # This is the Python Part of the Native Parser Implementation. |
@@ -34,29 +47,64 @@ from bb.parse import ParseError | |||
34 | # | 47 | # |
35 | # The rest of the methods are internal implementation details. | 48 | # The rest of the methods are internal implementation details. |
36 | 49 | ||
37 | 50 | def _init(fn, d): | |
38 | 51 | """ | |
39 | # | 52 | Initialize the data implementation with values of |
40 | # internal | 53 | the environment and data from the file. |
41 | # | 54 | """ |
42 | 55 | pass | |
43 | 56 | ||
44 | # | 57 | # |
45 | # public | 58 | # public |
46 | # | 59 | # |
47 | def supports(fn, data): | 60 | def supports(fn, data): |
48 | return fn[-3:] == ".bb" or fn[-8:] == ".bbclass" or fn[-4:] == ".inc" | 61 | return fn[-3:] == ".bb" or fn[-8:] == ".bbclass" or fn[-4:] == ".inc" or fn[-5:] == ".conf" |
49 | 62 | ||
50 | def init(fn, data): | 63 | def init(fn, data): |
51 | print "Init" | 64 | if not data.getVar('TOPDIR'): |
65 | bb.error('TOPDIR is not set') | ||
66 | if not data.getVar('BBPATH'): | ||
67 | bb.error('BBPATH is not set') | ||
68 | |||
52 | 69 | ||
53 | def handle(fn, data, include): | 70 | def handle(fn, d, include): |
54 | print "" | 71 | print "" |
55 | print "fn: %s" % fn | 72 | print "fn: %s" % fn |
56 | print "data: %s" % data | 73 | print "data: %s" % d |
74 | print dir(d) | ||
75 | print d.getVar.__doc__ | ||
57 | print "include: %s" % include | 76 | print "include: %s" % include |
58 | 77 | ||
59 | pass | 78 | # check if we include or are the beginning |
79 | if include: | ||
80 | oldfile = d.getVar('FILE') | ||
81 | else: | ||
82 | #d.inheritFromOS() | ||
83 | oldfile = None | ||
84 | |||
85 | # find the file | ||
86 | if not os.path.isabs(fn): | ||
87 | bb.error("No Absolute FILE name") | ||
88 | abs_fn = bb.which(d.getVar('BBPATH'), fn) | ||
89 | else: | ||
90 | abs_fn = fn | ||
91 | |||
92 | # check if the file exists | ||
93 | if not os.path.exists(abs_fn): | ||
94 | raise IOError("file '%(fn)' not found" % locals() ) | ||
95 | |||
96 | # now we know the file is around mark it as dep | ||
97 | if include: | ||
98 | parse.mark_dependency(d, abs_fn) | ||
99 | |||
100 | # now parse this file - by defering it to C++ | ||
101 | parsefile(fn, d) | ||
102 | |||
103 | # restore the original FILE | ||
104 | if oldfile: | ||
105 | d.setVar('FILE', oldfile) | ||
106 | |||
107 | return d | ||
60 | 108 | ||
61 | # Inform bitbake that we are a parser | 109 | # Inform bitbake that we are a parser |
62 | # We need to define all three | 110 | # We need to define all three |
diff --git a/bitbake/lib/bb/parse/parse_c/Makefile b/bitbake/lib/bb/parse/parse_c/Makefile new file mode 100644 index 0000000000..9eb7ce9d08 --- /dev/null +++ b/bitbake/lib/bb/parse/parse_c/Makefile | |||
@@ -0,0 +1,36 @@ | |||
1 | |||
2 | test: bitbakec.so | ||
3 | python test.py | ||
4 | |||
5 | bitbakescanner.cc: bitbakescanner.l | ||
6 | flex -t bitbakescanner.l > bitbakescanner.cc | ||
7 | |||
8 | bitbakeparser.cc: bitbakeparser.y python_output.h | ||
9 | lemon bitbakeparser.y | ||
10 | mv bitbakeparser.c bitbakeparser.cc | ||
11 | |||
12 | bitbakec.c: bitbakec.pyx | ||
13 | pyrexc bitbakec.pyx | ||
14 | |||
15 | bitbakec-processed.c: bitbakec.c | ||
16 | cat bitbakec.c | sed -e"s/__pyx_f_8bitbakec_//" > bitbakec-processed.c | ||
17 | |||
18 | bitbakec.o: bitbakec-processed.c | ||
19 | gcc -c bitbakec-processed.c -o bitbakec.o -fPIC -I/usr/include/python2.4 | ||
20 | |||
21 | bitbakeparser.o: bitbakeparser.cc | ||
22 | g++ -c bitbakeparser.cc -fPIC -I/usr/include/python2.4 | ||
23 | |||
24 | bitbakescanner.o: bitbakescanner.cc | ||
25 | g++ -c bitbakescanner.cc -fPIC -I/usr/include/python2.4 | ||
26 | |||
27 | bitbakec.so: bitbakec.o bitbakeparser.o bitbakescanner.o | ||
28 | g++ -shared -fPIC bitbakeparser.o bitbakescanner.o bitbakec.o -o bitbakec.so | ||
29 | |||
30 | clean: | ||
31 | rm *.out | ||
32 | rm *.cc | ||
33 | rm bitbakec.c | ||
34 | rm bitbakec-processed.c | ||
35 | rm *.o | ||
36 | rm *.so | ||
diff --git a/bitbake/lib/bb/parse/parse_c/bitbakec.pyx b/bitbake/lib/bb/parse/parse_c/bitbakec.pyx new file mode 100644 index 0000000000..362cc2021e --- /dev/null +++ b/bitbake/lib/bb/parse/parse_c/bitbakec.pyx | |||
@@ -0,0 +1,180 @@ | |||
1 | # ex:ts=4:sw=4:sts=4:et | ||
2 | # -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- | ||
3 | |||
4 | cdef extern from "stdio.h": | ||
5 | ctypedef int FILE | ||
6 | FILE *fopen(char*, char*) | ||
7 | int fclose(FILE *fp) | ||
8 | |||
9 | |||
10 | cdef extern from "lexerc.h": | ||
11 | ctypedef struct lex_t: | ||
12 | void* parser | ||
13 | void* scanner | ||
14 | FILE* file | ||
15 | void* data | ||
16 | |||
17 | int lineError | ||
18 | int errorParse | ||
19 | |||
20 | cdef extern void parse(FILE*, object) | ||
21 | |||
22 | def parsefile(object file, object data): | ||
23 | print "parsefile: 1", file, data | ||
24 | |||
25 | # Open the file | ||
26 | cdef FILE* f | ||
27 | |||
28 | f = fopen(file, "r") | ||
29 | print "parsefile: 2 opening file" | ||
30 | if (f == NULL): | ||
31 | raise IOError("No such file %s." % file) | ||
32 | |||
33 | print "parsefile: 3 parse" | ||
34 | parse(f, data) | ||
35 | |||
36 | # Close the file | ||
37 | print "parsefile: 4 closing" | ||
38 | fclose(f) | ||
39 | |||
40 | |||
41 | cdef public void e_assign(lex_t* container, char* key, char* what): | ||
42 | print "e_assign", key, what | ||
43 | d = <object>container.data | ||
44 | d.setVar(key, what) | ||
45 | |||
46 | cdef public void e_export(lex_t* c, char* what): | ||
47 | print "e_export", what | ||
48 | #exp: | ||
49 | # bb.data.setVarFlag(key, "export", 1, data) | ||
50 | d = <object>container.data | ||
51 | d.setVarFlag(key, "export", 1) | ||
52 | |||
53 | cdef public void e_immediate(lex_t* c, char* key, char* what): | ||
54 | print "e_immediate", key, what | ||
55 | #colon: | ||
56 | # val = bb.data.expand(groupd["value"], data) | ||
57 | d = <object>c.data | ||
58 | d.setVar(key, d.expand(what)) | ||
59 | |||
60 | cdef public void e_cond(lex_t* c, char* key, char* what): | ||
61 | print "e_cond", key, what | ||
62 | #ques: | ||
63 | # val = bb.data.getVar(key, data) | ||
64 | # if val == None: | ||
65 | # val = groupd["value"] | ||
66 | d = <object>c.data | ||
67 | d.setVar(key, (d.getVar(key) or what)) | ||
68 | |||
69 | cdef public void e_prepend(lex_t* c, char* key, char* what): | ||
70 | print "e_prepend", key, what | ||
71 | #prepend: | ||
72 | # val = "%s %s" % (groupd["value"], (bb.data.getVar(key, data) or "")) | ||
73 | d = <object>c.data | ||
74 | d.setVar(key, what + " " + (d.getVar(key) or "")) | ||
75 | |||
76 | cdef public void e_append(lex_t* c, char* key, char* what): | ||
77 | print "e_append", key, what | ||
78 | #append: | ||
79 | # val = "%s %s" % ((bb.data.getVar(key, data) or ""), groupd["value"]) | ||
80 | d = <object>c.data | ||
81 | d.setVar(key, (d.getVar(key) or "") + " " + what) | ||
82 | |||
83 | cdef public void e_precat(lex_t* c, char* key, char* what): | ||
84 | print "e_precat", key, what | ||
85 | #predot: | ||
86 | # val = "%s%s" % (groupd["value"], (bb.data.getVar(key, data) or "")) | ||
87 | d = <object>c.data | ||
88 | d.setVar(key, what + (d.getVar(key) or "")) | ||
89 | |||
90 | cdef public void e_postcat(lex_t* c, char* key, char* what): | ||
91 | print "e_postcat", key, what | ||
92 | #postdot: | ||
93 | # val = "%s%s" % ((bb.data.getVar(key, data) or ""), groupd["value"]) | ||
94 | d = <object>c.data | ||
95 | d.setVar(key, (d.getVar(key) or "") + what) | ||
96 | |||
97 | cdef public void e_addtask(lex_t* c, char* name, char* before, char* after): | ||
98 | print "e_addtask", name, before, after | ||
99 | # func = m.group("func") | ||
100 | # before = m.group("before") | ||
101 | # after = m.group("after") | ||
102 | # if func is None: | ||
103 | # return | ||
104 | # var = "do_" + func | ||
105 | # | ||
106 | # data.setVarFlag(var, "task", 1, d) | ||
107 | # | ||
108 | # if after is not None: | ||
109 | # # set up deps for function | ||
110 | # data.setVarFlag(var, "deps", after.split(), d) | ||
111 | # if before is not None: | ||
112 | # # set up things that depend on this func | ||
113 | # data.setVarFlag(var, "postdeps", before.split(), d) | ||
114 | # return | ||
115 | |||
116 | do = "do_%s" % name | ||
117 | d = <object>c.data | ||
118 | d.setVarFlag(do, "task", 1) | ||
119 | |||
120 | if strlen(before) > 0: | ||
121 | d.setVarFlag(do, "deps", ("%s" % after).split()) | ||
122 | if strlen(after) > 0: | ||
123 | d.setVarFlag(do, "deps", ("%s" % before).split()) | ||
124 | |||
125 | |||
126 | cdef public void e_addhandler(lex_t* c, char* h): | ||
127 | print "e_addhandler", h | ||
128 | # data.setVarFlag(h, "handler", 1, d) | ||
129 | d = <object>c.data | ||
130 | d.setVarFlag(h, "handler", 1) | ||
131 | |||
132 | cdef public void e_export_func(lex_t* c, char* function): | ||
133 | print "e_export_func", function | ||
134 | pass | ||
135 | |||
136 | cdef public void e_inherit(lex_t* c, char* file): | ||
137 | print "e_inherit", file | ||
138 | pass | ||
139 | |||
140 | cdef public void e_include(lex_t* c, char* file): | ||
141 | print "e_include", file | ||
142 | d = <object>c.data | ||
143 | d.expand(file) | ||
144 | |||
145 | try: | ||
146 | parsefile(file, d) | ||
147 | except IOError: | ||
148 | print "Could not include required file %s" % file | ||
149 | |||
150 | |||
151 | cdef public void e_require(lex_t* c, char* file): | ||
152 | print "e_require", file | ||
153 | d = <object>c.data | ||
154 | d.expand(file) | ||
155 | |||
156 | try: | ||
157 | parsefile(file, d) | ||
158 | except IOError: | ||
159 | raise CParseError("Could not include required file %s" % file) | ||
160 | |||
161 | cdef public void e_proc(lex_t* c, char* key, char* what): | ||
162 | print "e_proc", key, what | ||
163 | pass | ||
164 | |||
165 | cdef public void e_proc_python(lex_t* c, char* key, char* what): | ||
166 | print "e_proc_python", key, what | ||
167 | pass | ||
168 | |||
169 | cdef public void e_proc_fakeroot(lex_t* c, char* key, char* what): | ||
170 | print "e_fakeroot", key, what | ||
171 | pass | ||
172 | |||
173 | cdef public void e_def(lex_t* c, char* a, char* b, char* d): | ||
174 | print "e_def", key, what | ||
175 | pass | ||
176 | |||
177 | cdef public void e_parse_error(lex_t* c): | ||
178 | print "e_parse_error", "line:", lineError, "parse:", errorParse | ||
179 | raise CParseError("There was an parse error, sorry unable to give more information at the current time.") | ||
180 | |||
diff --git a/bitbake/lib/bb/parse/parse_c/bitbakeparser.cc b/bitbake/lib/bb/parse/parse_c/bitbakeparser.cc index 3a3c53dd46..ee9a901b70 100644 --- a/bitbake/lib/bb/parse/parse_c/bitbakeparser.cc +++ b/bitbake/lib/bb/parse/parse_c/bitbakeparser.cc | |||
@@ -59,22 +59,22 @@ | |||
59 | ** defined, then do no error processing. | 59 | ** defined, then do no error processing. |
60 | */ | 60 | */ |
61 | #define YYCODETYPE unsigned char | 61 | #define YYCODETYPE unsigned char |
62 | #define YYNOCODE 42 | 62 | #define YYNOCODE 44 |
63 | #define YYACTIONTYPE unsigned char | 63 | #define YYACTIONTYPE unsigned char |
64 | #define bbparseTOKENTYPE token_t | 64 | #define bbparseTOKENTYPE token_t |
65 | typedef union { | 65 | typedef union { |
66 | bbparseTOKENTYPE yy0; | 66 | bbparseTOKENTYPE yy0; |
67 | int yy83; | 67 | int yy87; |
68 | } YYMINORTYPE; | 68 | } YYMINORTYPE; |
69 | #define YYSTACKDEPTH 100 | 69 | #define YYSTACKDEPTH 100 |
70 | #define bbparseARG_SDECL lex_t* lex; | 70 | #define bbparseARG_SDECL lex_t* lex; |
71 | #define bbparseARG_PDECL ,lex_t* lex | 71 | #define bbparseARG_PDECL ,lex_t* lex |
72 | #define bbparseARG_FETCH lex_t* lex = yypParser->lex | 72 | #define bbparseARG_FETCH lex_t* lex = yypParser->lex |
73 | #define bbparseARG_STORE yypParser->lex = lex | 73 | #define bbparseARG_STORE yypParser->lex = lex |
74 | #define YYNSTATE 74 | 74 | #define YYNSTATE 82 |
75 | #define YYNRULE 41 | 75 | #define YYNRULE 45 |
76 | #define YYERRORSYMBOL 28 | 76 | #define YYERRORSYMBOL 30 |
77 | #define YYERRSYMDT yy83 | 77 | #define YYERRSYMDT yy87 |
78 | #define YY_NO_ACTION (YYNSTATE+YYNRULE+2) | 78 | #define YY_NO_ACTION (YYNSTATE+YYNRULE+2) |
79 | #define YY_ACCEPT_ACTION (YYNSTATE+YYNRULE+1) | 79 | #define YY_ACCEPT_ACTION (YYNSTATE+YYNRULE+1) |
80 | #define YY_ERROR_ACTION (YYNSTATE+YYNRULE) | 80 | #define YY_ERROR_ACTION (YYNSTATE+YYNRULE) |
@@ -127,53 +127,63 @@ typedef union { | |||
127 | ** yy_default[] Default action for each state. | 127 | ** yy_default[] Default action for each state. |
128 | */ | 128 | */ |
129 | static const YYACTIONTYPE yy_action[] = { | 129 | static const YYACTIONTYPE yy_action[] = { |
130 | /* 0 */ 28, 47, 5, 57, 33, 58, 30, 25, 24, 37, | 130 | /* 0 */ 82, 3, 7, 8, 38, 22, 39, 24, 26, 32, |
131 | /* 10 */ 45, 14, 2, 29, 41, 3, 16, 4, 23, 39, | 131 | /* 10 */ 34, 28, 30, 128, 1, 40, 53, 70, 55, 5, |
132 | /* 20 */ 69, 8, 11, 17, 26, 48, 47, 32, 21, 42, | 132 | /* 20 */ 60, 65, 67, 2, 21, 36, 69, 77, 9, 7, |
133 | /* 30 */ 31, 57, 57, 73, 44, 10, 66, 7, 34, 38, | 133 | /* 30 */ 11, 6, 13, 15, 17, 19, 12, 52, 50, 4, |
134 | /* 40 */ 57, 51, 72, 116, 1, 62, 6, 49, 52, 35, | 134 | /* 40 */ 74, 42, 46, 59, 57, 10, 64, 62, 38, 14, |
135 | /* 50 */ 36, 59, 54, 9, 20, 64, 43, 22, 40, 50, | 135 | /* 50 */ 73, 16, 38, 38, 76, 81, 18, 20, 23, 25, |
136 | /* 60 */ 46, 71, 67, 60, 15, 65, 61, 70, 53, 56, | 136 | /* 60 */ 27, 29, 31, 33, 35, 37, 56, 51, 90, 54, |
137 | /* 70 */ 27, 12, 68, 63, 84, 55, 18, 84, 13, 84, | 137 | /* 70 */ 58, 71, 41, 43, 63, 45, 44, 47, 72, 48, |
138 | /* 80 */ 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, | 138 | /* 80 */ 75, 78, 80, 61, 90, 49, 66, 90, 90, 68, |
139 | /* 90 */ 84, 19, | 139 | /* 90 */ 90, 90, 90, 90, 90, 79, |
140 | }; | 140 | }; |
141 | static const YYCODETYPE yy_lookahead[] = { | 141 | static const YYCODETYPE yy_lookahead[] = { |
142 | /* 0 */ 1, 2, 3, 21, 4, 23, 6, 7, 8, 9, | 142 | /* 0 */ 0, 1, 2, 3, 23, 4, 25, 6, 7, 8, |
143 | /* 10 */ 31, 32, 13, 14, 1, 16, 39, 18, 19, 20, | 143 | /* 10 */ 9, 10, 11, 31, 32, 15, 16, 1, 18, 42, |
144 | /* 20 */ 37, 38, 22, 24, 25, 1, 2, 4, 10, 6, | 144 | /* 20 */ 20, 21, 22, 33, 34, 24, 26, 27, 1, 2, |
145 | /* 30 */ 7, 21, 21, 23, 23, 22, 35, 36, 11, 12, | 145 | /* 30 */ 4, 28, 6, 7, 8, 9, 5, 35, 36, 29, |
146 | /* 40 */ 21, 5, 23, 29, 30, 33, 34, 5, 5, 10, | 146 | /* 40 */ 24, 13, 14, 37, 38, 34, 39, 40, 23, 5, |
147 | /* 50 */ 12, 10, 5, 22, 39, 15, 40, 11, 10, 5, | 147 | /* 50 */ 25, 5, 23, 23, 25, 25, 5, 5, 5, 5, |
148 | /* 60 */ 26, 17, 17, 10, 32, 35, 33, 17, 5, 5, | 148 | /* 60 */ 5, 5, 5, 5, 5, 41, 17, 35, 43, 1, |
149 | /* 70 */ 1, 22, 37, 1, 41, 5, 39, 41, 27, 41, | 149 | /* 70 */ 37, 24, 12, 12, 39, 12, 14, 12, 41, 13, |
150 | /* 80 */ 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, | 150 | /* 80 */ 41, 1, 41, 19, 43, 12, 19, 43, 43, 19, |
151 | /* 90 */ 41, 39, | 151 | /* 90 */ 43, 43, 43, 43, 43, 24, |
152 | }; | 152 | }; |
153 | #define YY_SHIFT_USE_DFLT (-19) | 153 | #define YY_SHIFT_USE_DFLT (-20) |
154 | #define YY_SHIFT_MAX 43 | ||
155 | static const signed char yy_shift_ofst[] = { | 154 | static const signed char yy_shift_ofst[] = { |
156 | /* 0 */ -19, -1, 18, 40, 45, 24, 18, 40, 45, -19, | 155 | /* 0 */ -20, 0, -20, 10, -20, 3, -20, -20, 27, -20, |
157 | /* 10 */ -19, -19, -19, -19, 0, 23, -18, 13, 19, 10, | 156 | /* 10 */ 26, 31, -20, 44, -20, 46, -20, 51, -20, 52, |
158 | /* 20 */ 11, 27, 53, 50, 63, 64, 69, 49, 51, 72, | 157 | /* 20 */ -20, 1, 53, -20, 54, -20, 55, -20, 56, -20, |
159 | /* 30 */ 70, 36, 42, 43, 39, 38, 41, 47, 48, 44, | 158 | /* 30 */ 57, -20, 58, -20, 59, -20, -20, -19, -20, -20, |
160 | /* 40 */ 46, 31, 54, 34, | 159 | /* 40 */ 60, 28, 61, 62, 63, -20, 65, 66, 73, -20, |
160 | /* 50 */ 60, -20, -20, 68, -20, 49, -20, 49, -20, -20, | ||
161 | /* 60 */ 64, -20, 64, -20, -20, 67, -20, 70, -20, 16, | ||
162 | /* 70 */ 47, -20, 25, -20, -20, 29, -20, 80, 71, -20, | ||
163 | /* 80 */ 30, -20, | ||
161 | }; | 164 | }; |
162 | #define YY_REDUCE_USE_DFLT (-24) | 165 | #define YY_REDUCE_USE_DFLT (-24) |
163 | #define YY_REDUCE_MAX 13 | ||
164 | static const signed char yy_reduce_ofst[] = { | 166 | static const signed char yy_reduce_ofst[] = { |
165 | /* 0 */ 14, -21, 12, 1, -17, 32, 33, 30, 35, 37, | 167 | /* 0 */ -18, -10, -24, -24, -23, -24, -24, -24, 11, -24, |
166 | /* 10 */ 52, -23, 15, 16, | 168 | /* 10 */ -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, |
169 | /* 20 */ -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, | ||
170 | /* 30 */ -24, -24, -24, -24, -24, -24, 24, -24, -24, -24, | ||
171 | /* 40 */ 2, -24, -24, -24, -24, -24, -24, -24, -24, -24, | ||
172 | /* 50 */ 32, -24, -24, -24, -24, 6, -24, 33, -24, -24, | ||
173 | /* 60 */ 7, -24, 35, -24, -24, -24, -24, -24, -24, -24, | ||
174 | /* 70 */ -24, 37, -24, -24, 39, -24, -24, -24, -24, 41, | ||
175 | /* 80 */ -24, -24, | ||
167 | }; | 176 | }; |
168 | static const YYACTIONTYPE yy_default[] = { | 177 | static const YYACTIONTYPE yy_default[] = { |
169 | /* 0 */ 76, 74, 115, 115, 115, 115, 94, 99, 103, 107, | 178 | /* 0 */ 84, 127, 83, 85, 125, 126, 124, 86, 127, 85, |
170 | /* 10 */ 107, 107, 107, 113, 115, 115, 115, 115, 115, 115, | 179 | /* 10 */ 127, 127, 87, 127, 88, 127, 89, 127, 90, 127, |
171 | /* 20 */ 115, 89, 115, 115, 115, 115, 115, 115, 77, 115, | 180 | /* 20 */ 91, 127, 127, 92, 127, 93, 127, 94, 127, 95, |
172 | /* 30 */ 115, 115, 115, 115, 115, 90, 115, 115, 115, 115, | 181 | /* 30 */ 127, 96, 127, 97, 127, 98, 119, 127, 118, 120, |
173 | /* 40 */ 91, 115, 115, 114, 111, 75, 112, 78, 77, 79, | 182 | /* 40 */ 127, 101, 127, 102, 127, 99, 127, 103, 127, 100, |
174 | /* 50 */ 80, 81, 82, 83, 84, 85, 86, 106, 108, 87, | 183 | /* 50 */ 106, 104, 105, 127, 107, 127, 108, 111, 109, 110, |
175 | /* 60 */ 88, 92, 93, 95, 96, 97, 98, 100, 101, 102, | 184 | /* 60 */ 127, 112, 115, 113, 114, 127, 116, 127, 117, 127, |
176 | /* 70 */ 104, 105, 109, 110, | 185 | /* 70 */ 127, 119, 127, 121, 119, 127, 122, 127, 127, 119, |
186 | /* 80 */ 127, 123, | ||
177 | }; | 187 | }; |
178 | #define YY_SZ_ACTTAB (sizeof(yy_action)/sizeof(yy_action[0])) | 188 | #define YY_SZ_ACTTAB (sizeof(yy_action)/sizeof(yy_action[0])) |
179 | 189 | ||
@@ -260,16 +270,16 @@ void bbparseTrace(FILE *TraceFILE, char *zTracePrompt){ | |||
260 | ** are required. The following table supplies these names */ | 270 | ** are required. The following table supplies these names */ |
261 | static const char *const yyTokenName[] = { | 271 | static const char *const yyTokenName[] = { |
262 | "$", "SYMBOL", "VARIABLE", "EXPORT", | 272 | "$", "SYMBOL", "VARIABLE", "EXPORT", |
263 | "OP_ASSIGN", "STRING", "OP_IMMEDIATE", "OP_COND", | 273 | "OP_ASSIGN", "STRING", "OP_PREDOT", "OP_POSTDOT", |
264 | "OP_PREPEND", "OP_APPEND", "TSYMBOL", "BEFORE", | 274 | "OP_IMMEDIATE", "OP_COND", "OP_PREPEND", "OP_APPEND", |
265 | "AFTER", "ADDTASK", "ADDHANDLER", "FSYMBOL", | 275 | "TSYMBOL", "BEFORE", "AFTER", "ADDTASK", |
266 | "EXPORT_FUNC", "ISYMBOL", "INHERIT", "INCLUDE", | 276 | "ADDHANDLER", "FSYMBOL", "EXPORT_FUNC", "ISYMBOL", |
267 | "REQUIRE", "PROC_BODY", "PROC_OPEN", "PROC_CLOSE", | 277 | "INHERIT", "INCLUDE", "REQUIRE", "PROC_BODY", |
268 | "PYTHON", "FAKEROOT", "DEF_BODY", "DEF_ARGS", | 278 | "PROC_OPEN", "PROC_CLOSE", "PYTHON", "FAKEROOT", |
269 | "error", "program", "statements", "statement", | 279 | "DEF_BODY", "DEF_ARGS", "error", "program", |
270 | "variable", "task", "tasks", "func", | 280 | "statements", "statement", "variable", "task", |
271 | "funcs", "inherit", "inherits", "proc_body", | 281 | "tasks", "func", "funcs", "inherit", |
272 | "def_body", | 282 | "inherits", "proc_body", "def_body", |
273 | }; | 283 | }; |
274 | #endif /* NDEBUG */ | 284 | #endif /* NDEBUG */ |
275 | 285 | ||
@@ -283,41 +293,45 @@ static const char *const yyRuleName[] = { | |||
283 | /* 3 */ "variable ::= SYMBOL", | 293 | /* 3 */ "variable ::= SYMBOL", |
284 | /* 4 */ "variable ::= VARIABLE", | 294 | /* 4 */ "variable ::= VARIABLE", |
285 | /* 5 */ "statement ::= EXPORT variable OP_ASSIGN STRING", | 295 | /* 5 */ "statement ::= EXPORT variable OP_ASSIGN STRING", |
286 | /* 6 */ "statement ::= EXPORT variable OP_IMMEDIATE STRING", | 296 | /* 6 */ "statement ::= EXPORT variable OP_PREDOT STRING", |
287 | /* 7 */ "statement ::= EXPORT variable OP_COND STRING", | 297 | /* 7 */ "statement ::= EXPORT variable OP_POSTDOT STRING", |
288 | /* 8 */ "statement ::= variable OP_ASSIGN STRING", | 298 | /* 8 */ "statement ::= EXPORT variable OP_IMMEDIATE STRING", |
289 | /* 9 */ "statement ::= variable OP_PREPEND STRING", | 299 | /* 9 */ "statement ::= EXPORT variable OP_COND STRING", |
290 | /* 10 */ "statement ::= variable OP_APPEND STRING", | 300 | /* 10 */ "statement ::= variable OP_ASSIGN STRING", |
291 | /* 11 */ "statement ::= variable OP_IMMEDIATE STRING", | 301 | /* 11 */ "statement ::= variable OP_PREDOT STRING", |
292 | /* 12 */ "statement ::= variable OP_COND STRING", | 302 | /* 12 */ "statement ::= variable OP_POSTDOT STRING", |
293 | /* 13 */ "task ::= TSYMBOL BEFORE TSYMBOL AFTER TSYMBOL", | 303 | /* 13 */ "statement ::= variable OP_PREPEND STRING", |
294 | /* 14 */ "task ::= TSYMBOL AFTER TSYMBOL BEFORE TSYMBOL", | 304 | /* 14 */ "statement ::= variable OP_APPEND STRING", |
295 | /* 15 */ "task ::= TSYMBOL", | 305 | /* 15 */ "statement ::= variable OP_IMMEDIATE STRING", |
296 | /* 16 */ "task ::= TSYMBOL BEFORE TSYMBOL", | 306 | /* 16 */ "statement ::= variable OP_COND STRING", |
297 | /* 17 */ "task ::= TSYMBOL AFTER TSYMBOL", | 307 | /* 17 */ "task ::= TSYMBOL BEFORE TSYMBOL AFTER TSYMBOL", |
298 | /* 18 */ "tasks ::= tasks task", | 308 | /* 18 */ "task ::= TSYMBOL AFTER TSYMBOL BEFORE TSYMBOL", |
299 | /* 19 */ "tasks ::= task", | 309 | /* 19 */ "task ::= TSYMBOL", |
300 | /* 20 */ "statement ::= ADDTASK tasks", | 310 | /* 20 */ "task ::= TSYMBOL BEFORE TSYMBOL", |
301 | /* 21 */ "statement ::= ADDHANDLER SYMBOL", | 311 | /* 21 */ "task ::= TSYMBOL AFTER TSYMBOL", |
302 | /* 22 */ "func ::= FSYMBOL", | 312 | /* 22 */ "tasks ::= tasks task", |
303 | /* 23 */ "funcs ::= funcs func", | 313 | /* 23 */ "tasks ::= task", |
304 | /* 24 */ "funcs ::= func", | 314 | /* 24 */ "statement ::= ADDTASK tasks", |
305 | /* 25 */ "statement ::= EXPORT_FUNC funcs", | 315 | /* 25 */ "statement ::= ADDHANDLER SYMBOL", |
306 | /* 26 */ "inherit ::= ISYMBOL", | 316 | /* 26 */ "func ::= FSYMBOL", |
307 | /* 27 */ "inherits ::= inherits inherit", | 317 | /* 27 */ "funcs ::= funcs func", |
308 | /* 28 */ "inherits ::= inherit", | 318 | /* 28 */ "funcs ::= func", |
309 | /* 29 */ "statement ::= INHERIT inherits", | 319 | /* 29 */ "statement ::= EXPORT_FUNC funcs", |
310 | /* 30 */ "statement ::= INCLUDE ISYMBOL", | 320 | /* 30 */ "inherit ::= ISYMBOL", |
311 | /* 31 */ "statement ::= REQUIRE ISYMBOL", | 321 | /* 31 */ "inherits ::= inherits inherit", |
312 | /* 32 */ "proc_body ::= proc_body PROC_BODY", | 322 | /* 32 */ "inherits ::= inherit", |
313 | /* 33 */ "proc_body ::=", | 323 | /* 33 */ "statement ::= INHERIT inherits", |
314 | /* 34 */ "statement ::= variable PROC_OPEN proc_body PROC_CLOSE", | 324 | /* 34 */ "statement ::= INCLUDE ISYMBOL", |
315 | /* 35 */ "statement ::= PYTHON SYMBOL PROC_OPEN proc_body PROC_CLOSE", | 325 | /* 35 */ "statement ::= REQUIRE ISYMBOL", |
316 | /* 36 */ "statement ::= PYTHON PROC_OPEN proc_body PROC_CLOSE", | 326 | /* 36 */ "proc_body ::= proc_body PROC_BODY", |
317 | /* 37 */ "statement ::= FAKEROOT SYMBOL PROC_OPEN proc_body PROC_CLOSE", | 327 | /* 37 */ "proc_body ::=", |
318 | /* 38 */ "def_body ::= def_body DEF_BODY", | 328 | /* 38 */ "statement ::= variable PROC_OPEN proc_body PROC_CLOSE", |
319 | /* 39 */ "def_body ::=", | 329 | /* 39 */ "statement ::= PYTHON SYMBOL PROC_OPEN proc_body PROC_CLOSE", |
320 | /* 40 */ "statement ::= SYMBOL DEF_ARGS def_body", | 330 | /* 40 */ "statement ::= PYTHON PROC_OPEN proc_body PROC_CLOSE", |
331 | /* 41 */ "statement ::= FAKEROOT SYMBOL PROC_OPEN proc_body PROC_CLOSE", | ||
332 | /* 42 */ "def_body ::= def_body DEF_BODY", | ||
333 | /* 43 */ "def_body ::=", | ||
334 | /* 44 */ "statement ::= SYMBOL DEF_ARGS def_body", | ||
321 | }; | 335 | }; |
322 | #endif /* NDEBUG */ | 336 | #endif /* NDEBUG */ |
323 | 337 | ||
@@ -402,9 +416,11 @@ static void yy_destructor(YYCODETYPE yymajor, YYMINORTYPE *yypminor){ | |||
402 | case 25: | 416 | case 25: |
403 | case 26: | 417 | case 26: |
404 | case 27: | 418 | case 27: |
419 | case 28: | ||
420 | case 29: | ||
405 | #line 50 "bitbakeparser.y" | 421 | #line 50 "bitbakeparser.y" |
406 | { (yypminor->yy0).release_this (); } | 422 | { (yypminor->yy0).release_this (); } |
407 | #line 409 "bitbakeparser.c" | 423 | #line 425 "bitbakeparser.c" |
408 | break; | 424 | break; |
409 | default: break; /* If no destructor action specified: do nothing */ | 425 | default: break; /* If no destructor action specified: do nothing */ |
410 | } | 426 | } |
@@ -473,7 +489,9 @@ static int yy_find_shift_action( | |||
473 | int i; | 489 | int i; |
474 | int stateno = pParser->yystack[pParser->yyidx].stateno; | 490 | int stateno = pParser->yystack[pParser->yyidx].stateno; |
475 | 491 | ||
476 | if( stateno>YY_SHIFT_MAX || (i = yy_shift_ofst[stateno])==YY_SHIFT_USE_DFLT ){ | 492 | /* if( pParser->yyidx<0 ) return YY_NO_ACTION; */ |
493 | i = yy_shift_ofst[stateno]; | ||
494 | if( i==YY_SHIFT_USE_DFLT ){ | ||
477 | return yy_default[stateno]; | 495 | return yy_default[stateno]; |
478 | } | 496 | } |
479 | if( iLookAhead==YYNOCODE ){ | 497 | if( iLookAhead==YYNOCODE ){ |
@@ -515,8 +533,8 @@ static int yy_find_reduce_action( | |||
515 | int i; | 533 | int i; |
516 | /* int stateno = pParser->yystack[pParser->yyidx].stateno; */ | 534 | /* int stateno = pParser->yystack[pParser->yyidx].stateno; */ |
517 | 535 | ||
518 | if( stateno>YY_REDUCE_MAX || | 536 | i = yy_reduce_ofst[stateno]; |
519 | (i = yy_reduce_ofst[stateno])==YY_REDUCE_USE_DFLT ){ | 537 | if( i==YY_REDUCE_USE_DFLT ){ |
520 | return yy_default[stateno]; | 538 | return yy_default[stateno]; |
521 | } | 539 | } |
522 | if( iLookAhead==YYNOCODE ){ | 540 | if( iLookAhead==YYNOCODE ){ |
@@ -578,47 +596,51 @@ static const struct { | |||
578 | YYCODETYPE lhs; /* Symbol on the left-hand side of the rule */ | 596 | YYCODETYPE lhs; /* Symbol on the left-hand side of the rule */ |
579 | unsigned char nrhs; /* Number of right-hand side symbols in the rule */ | 597 | unsigned char nrhs; /* Number of right-hand side symbols in the rule */ |
580 | } yyRuleInfo[] = { | 598 | } yyRuleInfo[] = { |
581 | { 29, 1 }, | 599 | { 31, 1 }, |
582 | { 30, 2 }, | 600 | { 32, 2 }, |
583 | { 30, 0 }, | 601 | { 32, 0 }, |
584 | { 32, 1 }, | 602 | { 34, 1 }, |
585 | { 32, 1 }, | 603 | { 34, 1 }, |
586 | { 31, 4 }, | 604 | { 33, 4 }, |
587 | { 31, 4 }, | 605 | { 33, 4 }, |
588 | { 31, 4 }, | 606 | { 33, 4 }, |
589 | { 31, 3 }, | 607 | { 33, 4 }, |
590 | { 31, 3 }, | 608 | { 33, 4 }, |
591 | { 31, 3 }, | ||
592 | { 31, 3 }, | ||
593 | { 31, 3 }, | ||
594 | { 33, 5 }, | ||
595 | { 33, 5 }, | ||
596 | { 33, 1 }, | ||
597 | { 33, 3 }, | 609 | { 33, 3 }, |
598 | { 33, 3 }, | 610 | { 33, 3 }, |
599 | { 34, 2 }, | 611 | { 33, 3 }, |
600 | { 34, 1 }, | 612 | { 33, 3 }, |
601 | { 31, 2 }, | 613 | { 33, 3 }, |
602 | { 31, 2 }, | 614 | { 33, 3 }, |
615 | { 33, 3 }, | ||
616 | { 35, 5 }, | ||
617 | { 35, 5 }, | ||
603 | { 35, 1 }, | 618 | { 35, 1 }, |
619 | { 35, 3 }, | ||
620 | { 35, 3 }, | ||
604 | { 36, 2 }, | 621 | { 36, 2 }, |
605 | { 36, 1 }, | 622 | { 36, 1 }, |
606 | { 31, 2 }, | 623 | { 33, 2 }, |
624 | { 33, 2 }, | ||
607 | { 37, 1 }, | 625 | { 37, 1 }, |
608 | { 38, 2 }, | 626 | { 38, 2 }, |
609 | { 38, 1 }, | 627 | { 38, 1 }, |
610 | { 31, 2 }, | 628 | { 33, 2 }, |
611 | { 31, 2 }, | 629 | { 39, 1 }, |
612 | { 31, 2 }, | ||
613 | { 39, 2 }, | ||
614 | { 39, 0 }, | ||
615 | { 31, 4 }, | ||
616 | { 31, 5 }, | ||
617 | { 31, 4 }, | ||
618 | { 31, 5 }, | ||
619 | { 40, 2 }, | 630 | { 40, 2 }, |
620 | { 40, 0 }, | 631 | { 40, 1 }, |
621 | { 31, 3 }, | 632 | { 33, 2 }, |
633 | { 33, 2 }, | ||
634 | { 33, 2 }, | ||
635 | { 41, 2 }, | ||
636 | { 41, 0 }, | ||
637 | { 33, 4 }, | ||
638 | { 33, 5 }, | ||
639 | { 33, 4 }, | ||
640 | { 33, 5 }, | ||
641 | { 42, 2 }, | ||
642 | { 42, 0 }, | ||
643 | { 33, 3 }, | ||
622 | }; | 644 | }; |
623 | 645 | ||
624 | static void yy_accept(yyParser*); /* Forward Declaration */ | 646 | static void yy_accept(yyParser*); /* Forward Declaration */ |
@@ -672,7 +694,7 @@ static void yy_reduce( | |||
672 | { yygotominor.yy0.assignString( (char*)yymsp[0].minor.yy0.string() ); | 694 | { yygotominor.yy0.assignString( (char*)yymsp[0].minor.yy0.string() ); |
673 | yymsp[0].minor.yy0.assignString( 0 ); | 695 | yymsp[0].minor.yy0.assignString( 0 ); |
674 | yymsp[0].minor.yy0.release_this(); } | 696 | yymsp[0].minor.yy0.release_this(); } |
675 | #line 677 "bitbakeparser.c" | 697 | #line 699 "bitbakeparser.c" |
676 | break; | 698 | break; |
677 | case 4: | 699 | case 4: |
678 | #line 64 "bitbakeparser.y" | 700 | #line 64 "bitbakeparser.y" |
@@ -680,7 +702,7 @@ static void yy_reduce( | |||
680 | yygotominor.yy0.assignString( (char*)yymsp[0].minor.yy0.string() ); | 702 | yygotominor.yy0.assignString( (char*)yymsp[0].minor.yy0.string() ); |
681 | yymsp[0].minor.yy0.assignString( 0 ); | 703 | yymsp[0].minor.yy0.assignString( 0 ); |
682 | yymsp[0].minor.yy0.release_this(); } | 704 | yymsp[0].minor.yy0.release_this(); } |
683 | #line 685 "bitbakeparser.c" | 705 | #line 707 "bitbakeparser.c" |
684 | break; | 706 | break; |
685 | case 5: | 707 | case 5: |
686 | #line 70 "bitbakeparser.y" | 708 | #line 70 "bitbakeparser.y" |
@@ -689,191 +711,223 @@ static void yy_reduce( | |||
689 | yymsp[-2].minor.yy0.release_this(); yymsp[0].minor.yy0.release_this(); yy_destructor(3,&yymsp[-3].minor); | 711 | yymsp[-2].minor.yy0.release_this(); yymsp[0].minor.yy0.release_this(); yy_destructor(3,&yymsp[-3].minor); |
690 | yy_destructor(4,&yymsp[-1].minor); | 712 | yy_destructor(4,&yymsp[-1].minor); |
691 | } | 713 | } |
692 | #line 694 "bitbakeparser.c" | 714 | #line 716 "bitbakeparser.c" |
693 | break; | 715 | break; |
694 | case 6: | 716 | case 6: |
695 | #line 74 "bitbakeparser.y" | 717 | #line 74 "bitbakeparser.y" |
696 | { e_immediate ( lex, yymsp[-2].minor.yy0.string(), yymsp[0].minor.yy0.string() ); | 718 | { e_precat( lex, yymsp[-2].minor.yy0.string(), yymsp[0].minor.yy0.string() ); |
697 | e_export( lex, yymsp[-2].minor.yy0.string() ); | 719 | e_export( lex, yymsp[-2].minor.yy0.string() ); |
698 | yymsp[-2].minor.yy0.release_this(); yymsp[0].minor.yy0.release_this(); yy_destructor(3,&yymsp[-3].minor); | 720 | yymsp[-2].minor.yy0.release_this(); yymsp[0].minor.yy0.release_this(); yy_destructor(3,&yymsp[-3].minor); |
699 | yy_destructor(6,&yymsp[-1].minor); | 721 | yy_destructor(6,&yymsp[-1].minor); |
700 | } | 722 | } |
701 | #line 703 "bitbakeparser.c" | 723 | #line 725 "bitbakeparser.c" |
702 | break; | 724 | break; |
703 | case 7: | 725 | case 7: |
704 | #line 78 "bitbakeparser.y" | 726 | #line 78 "bitbakeparser.y" |
705 | { e_cond( lex, yymsp[-2].minor.yy0.string(), yymsp[0].minor.yy0.string() ); | 727 | { e_postcat( lex, yymsp[-2].minor.yy0.string(), yymsp[0].minor.yy0.string() ); |
728 | e_export( lex, yymsp[-2].minor.yy0.string() ); | ||
706 | yymsp[-2].minor.yy0.release_this(); yymsp[0].minor.yy0.release_this(); yy_destructor(3,&yymsp[-3].minor); | 729 | yymsp[-2].minor.yy0.release_this(); yymsp[0].minor.yy0.release_this(); yy_destructor(3,&yymsp[-3].minor); |
707 | yy_destructor(7,&yymsp[-1].minor); | 730 | yy_destructor(7,&yymsp[-1].minor); |
708 | } | 731 | } |
709 | #line 711 "bitbakeparser.c" | 732 | #line 734 "bitbakeparser.c" |
710 | break; | 733 | break; |
711 | case 8: | 734 | case 8: |
712 | #line 82 "bitbakeparser.y" | 735 | #line 82 "bitbakeparser.y" |
713 | { e_assign( lex, yymsp[-2].minor.yy0.string(), yymsp[0].minor.yy0.string() ); | 736 | { e_immediate ( lex, yymsp[-2].minor.yy0.string(), yymsp[0].minor.yy0.string() ); |
714 | yymsp[-2].minor.yy0.release_this(); yymsp[0].minor.yy0.release_this(); yy_destructor(4,&yymsp[-1].minor); | 737 | e_export( lex, yymsp[-2].minor.yy0.string() ); |
738 | yymsp[-2].minor.yy0.release_this(); yymsp[0].minor.yy0.release_this(); yy_destructor(3,&yymsp[-3].minor); | ||
739 | yy_destructor(8,&yymsp[-1].minor); | ||
715 | } | 740 | } |
716 | #line 718 "bitbakeparser.c" | 741 | #line 743 "bitbakeparser.c" |
717 | break; | 742 | break; |
718 | case 9: | 743 | case 9: |
719 | #line 85 "bitbakeparser.y" | 744 | #line 86 "bitbakeparser.y" |
720 | { e_prepend( lex, yymsp[-2].minor.yy0.string(), yymsp[0].minor.yy0.string() ); | 745 | { e_cond( lex, yymsp[-2].minor.yy0.string(), yymsp[0].minor.yy0.string() ); |
721 | yymsp[-2].minor.yy0.release_this(); yymsp[0].minor.yy0.release_this(); yy_destructor(8,&yymsp[-1].minor); | 746 | yymsp[-2].minor.yy0.release_this(); yymsp[0].minor.yy0.release_this(); yy_destructor(3,&yymsp[-3].minor); |
747 | yy_destructor(9,&yymsp[-1].minor); | ||
722 | } | 748 | } |
723 | #line 725 "bitbakeparser.c" | 749 | #line 751 "bitbakeparser.c" |
724 | break; | 750 | break; |
725 | case 10: | 751 | case 10: |
726 | #line 88 "bitbakeparser.y" | 752 | #line 90 "bitbakeparser.y" |
727 | { e_append( lex, yymsp[-2].minor.yy0.string() , yymsp[0].minor.yy0.string() ); | 753 | { e_assign( lex, yymsp[-2].minor.yy0.string(), yymsp[0].minor.yy0.string() ); |
728 | yymsp[-2].minor.yy0.release_this(); yymsp[0].minor.yy0.release_this(); yy_destructor(9,&yymsp[-1].minor); | 754 | yymsp[-2].minor.yy0.release_this(); yymsp[0].minor.yy0.release_this(); yy_destructor(4,&yymsp[-1].minor); |
729 | } | 755 | } |
730 | #line 732 "bitbakeparser.c" | 756 | #line 758 "bitbakeparser.c" |
731 | break; | 757 | break; |
732 | case 11: | 758 | case 11: |
733 | #line 91 "bitbakeparser.y" | 759 | #line 93 "bitbakeparser.y" |
734 | { e_immediate( lex, yymsp[-2].minor.yy0.string(), yymsp[0].minor.yy0.string() ); | 760 | { e_precat( lex, yymsp[-2].minor.yy0.string(), yymsp[0].minor.yy0.string() ); |
735 | yymsp[-2].minor.yy0.release_this(); yymsp[0].minor.yy0.release_this(); yy_destructor(6,&yymsp[-1].minor); | 761 | yymsp[-2].minor.yy0.release_this(); yymsp[0].minor.yy0.release_this(); yy_destructor(6,&yymsp[-1].minor); |
736 | } | 762 | } |
737 | #line 739 "bitbakeparser.c" | 763 | #line 765 "bitbakeparser.c" |
738 | break; | 764 | break; |
739 | case 12: | 765 | case 12: |
740 | #line 94 "bitbakeparser.y" | 766 | #line 96 "bitbakeparser.y" |
741 | { e_cond( lex, yymsp[-2].minor.yy0.string(), yymsp[0].minor.yy0.string() ); | 767 | { e_postcat( lex, yymsp[-2].minor.yy0.string(), yymsp[0].minor.yy0.string() ); |
742 | yymsp[-2].minor.yy0.release_this(); yymsp[0].minor.yy0.release_this(); yy_destructor(7,&yymsp[-1].minor); | 768 | yymsp[-2].minor.yy0.release_this(); yymsp[0].minor.yy0.release_this(); yy_destructor(7,&yymsp[-1].minor); |
743 | } | 769 | } |
744 | #line 746 "bitbakeparser.c" | 770 | #line 772 "bitbakeparser.c" |
745 | break; | 771 | break; |
746 | case 13: | 772 | case 13: |
747 | #line 98 "bitbakeparser.y" | 773 | #line 99 "bitbakeparser.y" |
748 | { e_addtask( lex, yymsp[-4].minor.yy0.string(), yymsp[-2].minor.yy0.string(), yymsp[0].minor.yy0.string() ); | 774 | { e_prepend( lex, yymsp[-2].minor.yy0.string(), yymsp[0].minor.yy0.string() ); |
749 | yymsp[-4].minor.yy0.release_this(); yymsp[-2].minor.yy0.release_this(); yymsp[0].minor.yy0.release_this(); yy_destructor(11,&yymsp[-3].minor); | 775 | yymsp[-2].minor.yy0.release_this(); yymsp[0].minor.yy0.release_this(); yy_destructor(10,&yymsp[-1].minor); |
750 | yy_destructor(12,&yymsp[-1].minor); | ||
751 | } | 776 | } |
752 | #line 754 "bitbakeparser.c" | 777 | #line 779 "bitbakeparser.c" |
753 | break; | 778 | break; |
754 | case 14: | 779 | case 14: |
755 | #line 101 "bitbakeparser.y" | 780 | #line 102 "bitbakeparser.y" |
756 | { e_addtask( lex, yymsp[-4].minor.yy0.string(), yymsp[0].minor.yy0.string(), yymsp[-2].minor.yy0.string()); | 781 | { e_append( lex, yymsp[-2].minor.yy0.string() , yymsp[0].minor.yy0.string() ); |
757 | yymsp[-4].minor.yy0.release_this(); yymsp[-2].minor.yy0.release_this(); yymsp[0].minor.yy0.release_this(); yy_destructor(12,&yymsp[-3].minor); | 782 | yymsp[-2].minor.yy0.release_this(); yymsp[0].minor.yy0.release_this(); yy_destructor(11,&yymsp[-1].minor); |
758 | yy_destructor(11,&yymsp[-1].minor); | ||
759 | } | 783 | } |
760 | #line 762 "bitbakeparser.c" | 784 | #line 786 "bitbakeparser.c" |
761 | break; | 785 | break; |
762 | case 15: | 786 | case 15: |
763 | #line 104 "bitbakeparser.y" | 787 | #line 105 "bitbakeparser.y" |
788 | { e_immediate( lex, yymsp[-2].minor.yy0.string(), yymsp[0].minor.yy0.string() ); | ||
789 | yymsp[-2].minor.yy0.release_this(); yymsp[0].minor.yy0.release_this(); yy_destructor(8,&yymsp[-1].minor); | ||
790 | } | ||
791 | #line 793 "bitbakeparser.c" | ||
792 | break; | ||
793 | case 16: | ||
794 | #line 108 "bitbakeparser.y" | ||
795 | { e_cond( lex, yymsp[-2].minor.yy0.string(), yymsp[0].minor.yy0.string() ); | ||
796 | yymsp[-2].minor.yy0.release_this(); yymsp[0].minor.yy0.release_this(); yy_destructor(9,&yymsp[-1].minor); | ||
797 | } | ||
798 | #line 800 "bitbakeparser.c" | ||
799 | break; | ||
800 | case 17: | ||
801 | #line 112 "bitbakeparser.y" | ||
802 | { e_addtask( lex, yymsp[-4].minor.yy0.string(), yymsp[-2].minor.yy0.string(), yymsp[0].minor.yy0.string() ); | ||
803 | yymsp[-4].minor.yy0.release_this(); yymsp[-2].minor.yy0.release_this(); yymsp[0].minor.yy0.release_this(); yy_destructor(13,&yymsp[-3].minor); | ||
804 | yy_destructor(14,&yymsp[-1].minor); | ||
805 | } | ||
806 | #line 808 "bitbakeparser.c" | ||
807 | break; | ||
808 | case 18: | ||
809 | #line 115 "bitbakeparser.y" | ||
810 | { e_addtask( lex, yymsp[-4].minor.yy0.string(), yymsp[0].minor.yy0.string(), yymsp[-2].minor.yy0.string()); | ||
811 | yymsp[-4].minor.yy0.release_this(); yymsp[-2].minor.yy0.release_this(); yymsp[0].minor.yy0.release_this(); yy_destructor(14,&yymsp[-3].minor); | ||
812 | yy_destructor(13,&yymsp[-1].minor); | ||
813 | } | ||
814 | #line 816 "bitbakeparser.c" | ||
815 | break; | ||
816 | case 19: | ||
817 | #line 118 "bitbakeparser.y" | ||
764 | { e_addtask( lex, yymsp[0].minor.yy0.string(), NULL, NULL); | 818 | { e_addtask( lex, yymsp[0].minor.yy0.string(), NULL, NULL); |
765 | yymsp[0].minor.yy0.release_this();} | 819 | yymsp[0].minor.yy0.release_this();} |
766 | #line 768 "bitbakeparser.c" | 820 | #line 822 "bitbakeparser.c" |
767 | break; | 821 | break; |
768 | case 16: | 822 | case 20: |
769 | #line 107 "bitbakeparser.y" | 823 | #line 121 "bitbakeparser.y" |
770 | { e_addtask( lex, yymsp[-2].minor.yy0.string(), yymsp[0].minor.yy0.string(), NULL); | 824 | { e_addtask( lex, yymsp[-2].minor.yy0.string(), yymsp[0].minor.yy0.string(), NULL); |
771 | yymsp[-2].minor.yy0.release_this(); yymsp[0].minor.yy0.release_this(); yy_destructor(11,&yymsp[-1].minor); | 825 | yymsp[-2].minor.yy0.release_this(); yymsp[0].minor.yy0.release_this(); yy_destructor(13,&yymsp[-1].minor); |
772 | } | 826 | } |
773 | #line 775 "bitbakeparser.c" | 827 | #line 829 "bitbakeparser.c" |
774 | break; | 828 | break; |
775 | case 17: | 829 | case 21: |
776 | #line 110 "bitbakeparser.y" | 830 | #line 124 "bitbakeparser.y" |
777 | { e_addtask( lex, yymsp[-2].minor.yy0.string(), NULL, yymsp[0].minor.yy0.string()); | 831 | { e_addtask( lex, yymsp[-2].minor.yy0.string(), NULL, yymsp[0].minor.yy0.string()); |
778 | yymsp[-2].minor.yy0.release_this(); yymsp[0].minor.yy0.release_this(); yy_destructor(12,&yymsp[-1].minor); | 832 | yymsp[-2].minor.yy0.release_this(); yymsp[0].minor.yy0.release_this(); yy_destructor(14,&yymsp[-1].minor); |
779 | } | 833 | } |
780 | #line 782 "bitbakeparser.c" | 834 | #line 836 "bitbakeparser.c" |
781 | break; | 835 | break; |
782 | case 21: | 836 | case 25: |
783 | #line 117 "bitbakeparser.y" | 837 | #line 131 "bitbakeparser.y" |
784 | { e_addhandler( lex, yymsp[0].minor.yy0.string()); yymsp[0].minor.yy0.release_this (); yy_destructor(14,&yymsp[-1].minor); | 838 | { e_addhandler( lex, yymsp[0].minor.yy0.string()); yymsp[0].minor.yy0.release_this (); yy_destructor(16,&yymsp[-1].minor); |
785 | } | 839 | } |
786 | #line 788 "bitbakeparser.c" | 840 | #line 842 "bitbakeparser.c" |
787 | break; | 841 | break; |
788 | case 22: | 842 | case 26: |
789 | #line 119 "bitbakeparser.y" | 843 | #line 133 "bitbakeparser.y" |
790 | { e_export_func( lex, yymsp[0].minor.yy0.string()); yymsp[0].minor.yy0.release_this(); } | 844 | { e_export_func( lex, yymsp[0].minor.yy0.string()); yymsp[0].minor.yy0.release_this(); } |
791 | #line 793 "bitbakeparser.c" | 845 | #line 847 "bitbakeparser.c" |
792 | break; | 846 | break; |
793 | case 26: | 847 | case 30: |
794 | #line 124 "bitbakeparser.y" | 848 | #line 138 "bitbakeparser.y" |
795 | { e_inherit( lex, yymsp[0].minor.yy0.string() ); yymsp[0].minor.yy0.release_this (); } | 849 | { e_inherit( lex, yymsp[0].minor.yy0.string() ); yymsp[0].minor.yy0.release_this (); } |
796 | #line 798 "bitbakeparser.c" | 850 | #line 852 "bitbakeparser.c" |
797 | break; | 851 | break; |
798 | case 30: | 852 | case 34: |
799 | #line 130 "bitbakeparser.y" | 853 | #line 144 "bitbakeparser.y" |
800 | { e_include( lex, yymsp[0].minor.yy0.string() ); yymsp[0].minor.yy0.release_this(); yy_destructor(19,&yymsp[-1].minor); | 854 | { e_include( lex, yymsp[0].minor.yy0.string() ); yymsp[0].minor.yy0.release_this(); yy_destructor(21,&yymsp[-1].minor); |
801 | } | 855 | } |
802 | #line 804 "bitbakeparser.c" | 856 | #line 858 "bitbakeparser.c" |
803 | break; | 857 | break; |
804 | case 31: | 858 | case 35: |
805 | #line 133 "bitbakeparser.y" | 859 | #line 147 "bitbakeparser.y" |
806 | { e_require( lex, yymsp[0].minor.yy0.string() ); yymsp[0].minor.yy0.release_this(); yy_destructor(20,&yymsp[-1].minor); | 860 | { e_require( lex, yymsp[0].minor.yy0.string() ); yymsp[0].minor.yy0.release_this(); yy_destructor(22,&yymsp[-1].minor); |
807 | } | 861 | } |
808 | #line 810 "bitbakeparser.c" | 862 | #line 864 "bitbakeparser.c" |
809 | break; | 863 | break; |
810 | case 32: | 864 | case 36: |
811 | #line 136 "bitbakeparser.y" | 865 | #line 150 "bitbakeparser.y" |
812 | { /* concatenate body lines */ | 866 | { /* concatenate body lines */ |
813 | yygotominor.yy0.assignString( token_t::concatString(yymsp[-1].minor.yy0.string(), yymsp[0].minor.yy0.string()) ); | 867 | yygotominor.yy0.assignString( token_t::concatString(yymsp[-1].minor.yy0.string(), yymsp[0].minor.yy0.string()) ); |
814 | yymsp[-1].minor.yy0.release_this (); | 868 | yymsp[-1].minor.yy0.release_this (); |
815 | yymsp[0].minor.yy0.release_this (); | 869 | yymsp[0].minor.yy0.release_this (); |
816 | } | 870 | } |
817 | #line 819 "bitbakeparser.c" | 871 | #line 873 "bitbakeparser.c" |
818 | break; | 872 | break; |
819 | case 33: | 873 | case 37: |
820 | #line 141 "bitbakeparser.y" | 874 | #line 155 "bitbakeparser.y" |
821 | { yygotominor.yy0.assignString(0); } | 875 | { yygotominor.yy0.assignString(0); } |
822 | #line 824 "bitbakeparser.c" | 876 | #line 878 "bitbakeparser.c" |
823 | break; | 877 | break; |
824 | case 34: | 878 | case 38: |
825 | #line 143 "bitbakeparser.y" | 879 | #line 157 "bitbakeparser.y" |
826 | { e_proc( lex, yymsp[-3].minor.yy0.string(), yymsp[-1].minor.yy0.string() ); | 880 | { e_proc( lex, yymsp[-3].minor.yy0.string(), yymsp[-1].minor.yy0.string() ); |
827 | yymsp[-3].minor.yy0.release_this(); yymsp[-1].minor.yy0.release_this(); yy_destructor(22,&yymsp[-2].minor); | 881 | yymsp[-3].minor.yy0.release_this(); yymsp[-1].minor.yy0.release_this(); yy_destructor(24,&yymsp[-2].minor); |
828 | yy_destructor(23,&yymsp[0].minor); | 882 | yy_destructor(25,&yymsp[0].minor); |
829 | } | 883 | } |
830 | #line 832 "bitbakeparser.c" | 884 | #line 886 "bitbakeparser.c" |
831 | break; | 885 | break; |
832 | case 35: | 886 | case 39: |
833 | #line 146 "bitbakeparser.y" | 887 | #line 160 "bitbakeparser.y" |
834 | { e_proc_python ( lex, yymsp[-3].minor.yy0.string(), yymsp[-1].minor.yy0.string() ); | 888 | { e_proc_python ( lex, yymsp[-3].minor.yy0.string(), yymsp[-1].minor.yy0.string() ); |
835 | yymsp[-3].minor.yy0.release_this(); yymsp[-1].minor.yy0.release_this(); yy_destructor(24,&yymsp[-4].minor); | 889 | yymsp[-3].minor.yy0.release_this(); yymsp[-1].minor.yy0.release_this(); yy_destructor(26,&yymsp[-4].minor); |
836 | yy_destructor(22,&yymsp[-2].minor); | 890 | yy_destructor(24,&yymsp[-2].minor); |
837 | yy_destructor(23,&yymsp[0].minor); | 891 | yy_destructor(25,&yymsp[0].minor); |
838 | } | 892 | } |
839 | #line 841 "bitbakeparser.c" | 893 | #line 895 "bitbakeparser.c" |
840 | break; | 894 | break; |
841 | case 36: | 895 | case 40: |
842 | #line 149 "bitbakeparser.y" | 896 | #line 163 "bitbakeparser.y" |
843 | { e_proc_python( lex, NULL, yymsp[-1].minor.yy0.string()); | 897 | { e_proc_python( lex, NULL, yymsp[-1].minor.yy0.string()); |
844 | yymsp[-1].minor.yy0.release_this (); yy_destructor(24,&yymsp[-3].minor); | 898 | yymsp[-1].minor.yy0.release_this (); yy_destructor(26,&yymsp[-3].minor); |
845 | yy_destructor(22,&yymsp[-2].minor); | 899 | yy_destructor(24,&yymsp[-2].minor); |
846 | yy_destructor(23,&yymsp[0].minor); | 900 | yy_destructor(25,&yymsp[0].minor); |
847 | } | 901 | } |
848 | #line 850 "bitbakeparser.c" | 902 | #line 904 "bitbakeparser.c" |
849 | break; | 903 | break; |
850 | case 37: | 904 | case 41: |
851 | #line 153 "bitbakeparser.y" | 905 | #line 167 "bitbakeparser.y" |
852 | { e_proc_fakeroot( lex, yymsp[-3].minor.yy0.string(), yymsp[-1].minor.yy0.string() ); | 906 | { e_proc_fakeroot( lex, yymsp[-3].minor.yy0.string(), yymsp[-1].minor.yy0.string() ); |
853 | yymsp[-3].minor.yy0.release_this (); yymsp[-1].minor.yy0.release_this (); yy_destructor(25,&yymsp[-4].minor); | 907 | yymsp[-3].minor.yy0.release_this (); yymsp[-1].minor.yy0.release_this (); yy_destructor(27,&yymsp[-4].minor); |
854 | yy_destructor(22,&yymsp[-2].minor); | 908 | yy_destructor(24,&yymsp[-2].minor); |
855 | yy_destructor(23,&yymsp[0].minor); | 909 | yy_destructor(25,&yymsp[0].minor); |
856 | } | 910 | } |
857 | #line 859 "bitbakeparser.c" | 911 | #line 913 "bitbakeparser.c" |
858 | break; | 912 | break; |
859 | case 38: | 913 | case 42: |
860 | #line 157 "bitbakeparser.y" | 914 | #line 171 "bitbakeparser.y" |
861 | { /* concatenate body lines */ | 915 | { /* concatenate body lines */ |
862 | yygotominor.yy0.assignString( token_t::concatString(yymsp[-1].minor.yy0.string(), yymsp[0].minor.yy0.string()) ); | 916 | yygotominor.yy0.assignString( token_t::concatString(yymsp[-1].minor.yy0.string(), yymsp[0].minor.yy0.string()) ); |
863 | yymsp[-1].minor.yy0.release_this (); yymsp[0].minor.yy0.release_this (); | 917 | yymsp[-1].minor.yy0.release_this (); yymsp[0].minor.yy0.release_this (); |
864 | } | 918 | } |
865 | #line 867 "bitbakeparser.c" | 919 | #line 921 "bitbakeparser.c" |
866 | break; | 920 | break; |
867 | case 39: | 921 | case 43: |
868 | #line 161 "bitbakeparser.y" | 922 | #line 175 "bitbakeparser.y" |
869 | { yygotominor.yy0.assignString( 0 ); } | 923 | { yygotominor.yy0.assignString( 0 ); } |
870 | #line 872 "bitbakeparser.c" | 924 | #line 926 "bitbakeparser.c" |
871 | break; | 925 | break; |
872 | case 40: | 926 | case 44: |
873 | #line 163 "bitbakeparser.y" | 927 | #line 177 "bitbakeparser.y" |
874 | { e_def( lex, yymsp[-2].minor.yy0.string(), yymsp[-1].minor.yy0.string(), yymsp[0].minor.yy0.string()); | 928 | { e_def( lex, yymsp[-2].minor.yy0.string(), yymsp[-1].minor.yy0.string(), yymsp[0].minor.yy0.string()); |
875 | yymsp[-2].minor.yy0.release_this(); yymsp[-1].minor.yy0.release_this(); yymsp[0].minor.yy0.release_this(); } | 929 | yymsp[-2].minor.yy0.release_this(); yymsp[-1].minor.yy0.release_this(); yymsp[0].minor.yy0.release_this(); } |
876 | #line 878 "bitbakeparser.c" | 930 | #line 932 "bitbakeparser.c" |
877 | break; | 931 | break; |
878 | }; | 932 | }; |
879 | yygoto = yyRuleInfo[yyruleno].lhs; | 933 | yygoto = yyRuleInfo[yyruleno].lhs; |
@@ -932,7 +986,7 @@ static void yy_syntax_error( | |||
932 | #define TOKEN (yyminor.yy0) | 986 | #define TOKEN (yyminor.yy0) |
933 | #line 52 "bitbakeparser.y" | 987 | #line 52 "bitbakeparser.y" |
934 | e_parse_error( lex ); | 988 | e_parse_error( lex ); |
935 | #line 938 "bitbakeparser.c" | 989 | #line 992 "bitbakeparser.c" |
936 | bbparseARG_STORE; /* Suppress warning about unused %extra_argument variable */ | 990 | bbparseARG_STORE; /* Suppress warning about unused %extra_argument variable */ |
937 | } | 991 | } |
938 | 992 | ||
diff --git a/bitbake/lib/bb/parse/parse_c/bitbakeparser.h b/bitbake/lib/bb/parse/parse_c/bitbakeparser.h index 2e51702be8..a2c9aa367d 100644 --- a/bitbake/lib/bb/parse/parse_c/bitbakeparser.h +++ b/bitbake/lib/bb/parse/parse_c/bitbakeparser.h | |||
@@ -3,25 +3,27 @@ | |||
3 | #define T_EXPORT 3 | 3 | #define T_EXPORT 3 |
4 | #define T_OP_ASSIGN 4 | 4 | #define T_OP_ASSIGN 4 |
5 | #define T_STRING 5 | 5 | #define T_STRING 5 |
6 | #define T_OP_IMMEDIATE 6 | 6 | #define T_OP_PREDOT 6 |
7 | #define T_OP_COND 7 | 7 | #define T_OP_POSTDOT 7 |
8 | #define T_OP_PREPEND 8 | 8 | #define T_OP_IMMEDIATE 8 |
9 | #define T_OP_APPEND 9 | 9 | #define T_OP_COND 9 |
10 | #define T_TSYMBOL 10 | 10 | #define T_OP_PREPEND 10 |
11 | #define T_BEFORE 11 | 11 | #define T_OP_APPEND 11 |
12 | #define T_AFTER 12 | 12 | #define T_TSYMBOL 12 |
13 | #define T_ADDTASK 13 | 13 | #define T_BEFORE 13 |
14 | #define T_ADDHANDLER 14 | 14 | #define T_AFTER 14 |
15 | #define T_FSYMBOL 15 | 15 | #define T_ADDTASK 15 |
16 | #define T_EXPORT_FUNC 16 | 16 | #define T_ADDHANDLER 16 |
17 | #define T_ISYMBOL 17 | 17 | #define T_FSYMBOL 17 |
18 | #define T_INHERIT 18 | 18 | #define T_EXPORT_FUNC 18 |
19 | #define T_INCLUDE 19 | 19 | #define T_ISYMBOL 19 |
20 | #define T_REQUIRE 20 | 20 | #define T_INHERIT 20 |
21 | #define T_PROC_BODY 21 | 21 | #define T_INCLUDE 21 |
22 | #define T_PROC_OPEN 22 | 22 | #define T_REQUIRE 22 |
23 | #define T_PROC_CLOSE 23 | 23 | #define T_PROC_BODY 23 |
24 | #define T_PYTHON 24 | 24 | #define T_PROC_OPEN 24 |
25 | #define T_FAKEROOT 25 | 25 | #define T_PROC_CLOSE 25 |
26 | #define T_DEF_BODY 26 | 26 | #define T_PYTHON 26 |
27 | #define T_DEF_ARGS 27 | 27 | #define T_FAKEROOT 27 |
28 | #define T_DEF_BODY 28 | ||
29 | #define T_DEF_ARGS 29 | ||
diff --git a/bitbake/lib/bb/parse/parse_c/bitbakeparser.y b/bitbake/lib/bb/parse/parse_c/bitbakeparser.y index 252d87792f..c18e53543b 100644 --- a/bitbake/lib/bb/parse/parse_c/bitbakeparser.y +++ b/bitbake/lib/bb/parse/parse_c/bitbakeparser.y | |||
@@ -70,6 +70,14 @@ statement ::= EXPORT variable(s) OP_ASSIGN STRING(v). | |||
70 | { e_assign( lex, s.string(), v.string() ); | 70 | { e_assign( lex, s.string(), v.string() ); |
71 | e_export( lex, s.string() ); | 71 | e_export( lex, s.string() ); |
72 | s.release_this(); v.release_this(); } | 72 | s.release_this(); v.release_this(); } |
73 | statement ::= EXPORT variable(s) OP_PREDOT STRING(v). | ||
74 | { e_precat( lex, s.string(), v.string() ); | ||
75 | e_export( lex, s.string() ); | ||
76 | s.release_this(); v.release_this(); } | ||
77 | statement ::= EXPORT variable(s) OP_POSTDOT STRING(v). | ||
78 | { e_postcat( lex, s.string(), v.string() ); | ||
79 | e_export( lex, s.string() ); | ||
80 | s.release_this(); v.release_this(); } | ||
73 | statement ::= EXPORT variable(s) OP_IMMEDIATE STRING(v). | 81 | statement ::= EXPORT variable(s) OP_IMMEDIATE STRING(v). |
74 | { e_immediate ( lex, s.string(), v.string() ); | 82 | { e_immediate ( lex, s.string(), v.string() ); |
75 | e_export( lex, s.string() ); | 83 | e_export( lex, s.string() ); |
@@ -81,6 +89,12 @@ statement ::= EXPORT variable(s) OP_COND STRING(v). | |||
81 | statement ::= variable(s) OP_ASSIGN STRING(v). | 89 | statement ::= variable(s) OP_ASSIGN STRING(v). |
82 | { e_assign( lex, s.string(), v.string() ); | 90 | { e_assign( lex, s.string(), v.string() ); |
83 | s.release_this(); v.release_this(); } | 91 | s.release_this(); v.release_this(); } |
92 | statement ::= variable(s) OP_PREDOT STRING(v). | ||
93 | { e_precat( lex, s.string(), v.string() ); | ||
94 | s.release_this(); v.release_this(); } | ||
95 | statement ::= variable(s) OP_POSTDOT STRING(v). | ||
96 | { e_postcat( lex, s.string(), v.string() ); | ||
97 | s.release_this(); v.release_this(); } | ||
84 | statement ::= variable(s) OP_PREPEND STRING(v). | 98 | statement ::= variable(s) OP_PREPEND STRING(v). |
85 | { e_prepend( lex, s.string(), v.string() ); | 99 | { e_prepend( lex, s.string(), v.string() ); |
86 | s.release_this(); v.release_this(); } | 100 | s.release_this(); v.release_this(); } |
diff --git a/bitbake/lib/bb/parse/parse_c/bitbakescanner.cc b/bitbake/lib/bb/parse/parse_c/bitbakescanner.cc index 8e95fd97c8..43dad12d39 100644 --- a/bitbake/lib/bb/parse/parse_c/bitbakescanner.cc +++ b/bitbake/lib/bb/parse/parse_c/bitbakescanner.cc | |||
@@ -355,8 +355,8 @@ static void yy_fatal_error (yyconst char msg[] ,yyscan_t yyscanner ); | |||
355 | *yy_cp = '\0'; \ | 355 | *yy_cp = '\0'; \ |
356 | yyg->yy_c_buf_p = yy_cp; | 356 | yyg->yy_c_buf_p = yy_cp; |
357 | 357 | ||
358 | #define YY_NUM_RULES 45 | 358 | #define YY_NUM_RULES 47 |
359 | #define YY_END_OF_BUFFER 46 | 359 | #define YY_END_OF_BUFFER 48 |
360 | /* This struct is not used in this scanner, | 360 | /* This struct is not used in this scanner, |
361 | but its presence is necessary. */ | 361 | but its presence is necessary. */ |
362 | struct yy_trans_info | 362 | struct yy_trans_info |
@@ -364,96 +364,98 @@ struct yy_trans_info | |||
364 | flex_int32_t yy_verify; | 364 | flex_int32_t yy_verify; |
365 | flex_int32_t yy_nxt; | 365 | flex_int32_t yy_nxt; |
366 | }; | 366 | }; |
367 | static yyconst flex_int16_t yy_accept[798] = | 367 | static yyconst flex_int16_t yy_accept[813] = |
368 | { 0, | 368 | { 0, |
369 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | 369 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
370 | 0, 0, 0, 0, 0, 0, 24, 24, 0, 0, | 370 | 0, 0, 0, 0, 0, 0, 26, 26, 0, 0, |
371 | 0, 0, 46, 44, 43, 43, 44, 44, 44, 44, | 371 | 0, 0, 48, 46, 45, 45, 46, 46, 46, 46, |
372 | 44, 4, 44, 33, 33, 33, 33, 33, 33, 33, | 372 | 46, 46, 4, 46, 35, 35, 35, 35, 35, 35, |
373 | 33, 33, 26, 26, 26, 26, 26, 26, 44, 43, | 373 | 35, 35, 35, 28, 28, 28, 28, 28, 28, 46, |
374 | 28, 43, 44, 44, 44, 27, 4, 44, 44, 44, | 374 | 45, 30, 45, 46, 46, 46, 46, 29, 4, 46, |
375 | 44, 44, 44, 31, 31, 30, 31, 31, 31, 31, | 375 | 46, 46, 46, 46, 46, 33, 33, 32, 33, 33, |
376 | 31, 4, 31, 31, 31, 31, 31, 31, 41, 36, | 376 | 33, 33, 33, 33, 4, 33, 33, 33, 33, 33, |
377 | 36, 36, 36, 36, 36, 44, 38, 38, 38, 38, | 377 | 33, 43, 38, 38, 38, 38, 38, 38, 46, 40, |
378 | 38, 38, 42, 37, 37, 37, 37, 37, 37, 44, | 378 | 40, 40, 40, 40, 40, 40, 44, 39, 39, 39, |
379 | 379 | ||
380 | 39, 39, 39, 39, 39, 39, 24, 24, 24, 24, | 380 | 39, 39, 39, 46, 41, 41, 41, 41, 41, 41, |
381 | 24, 24, 24, 4, 24, 24, 24, 24, 24, 24, | 381 | 41, 26, 26, 26, 26, 26, 26, 26, 26, 4, |
382 | 23, 9, 43, 10, 9, 44, 9, 44, 9, 9, | 382 | 26, 26, 26, 26, 26, 26, 25, 11, 45, 12, |
383 | 9, 4, 9, 9, 9, 9, 9, 9, 9, 40, | 383 | 11, 46, 11, 46, 11, 11, 11, 11, 4, 11, |
384 | 35, 35, 35, 35, 35, 35, 35, 0, 32, 34, | 384 | 11, 11, 11, 11, 11, 11, 42, 37, 37, 37, |
385 | 0, 0, 1, 3, 2, 5, 0, 33, 0, 33, | 385 | 37, 37, 37, 37, 0, 34, 36, 0, 0, 1, |
386 | 33, 33, 33, 33, 33, 33, 33, 26, 26, 26, | 386 | 5, 3, 2, 6, 7, 0, 35, 0, 35, 35, |
387 | 26, 26, 26, 0, 27, 0, 28, 0, 27, 0, | 387 | 35, 35, 35, 35, 35, 35, 28, 28, 28, 28, |
388 | 0, 1, 2, 5, 0, 0, 0, 0, 0, 0, | 388 | 28, 28, 0, 29, 0, 30, 0, 29, 0, 0, |
389 | 0, 29, 0, 0, 0, 0, 0, 36, 36, 36, | 389 | 1, 5, 2, 6, 7, 0, 0, 0, 0, 0, |
390 | 390 | ||
391 | 36, 36, 36, 0, 0, 38, 38, 38, 38, 38, | 391 | 0, 0, 31, 0, 0, 0, 0, 0, 38, 38, |
392 | 38, 37, 37, 37, 37, 37, 37, 0, 0, 39, | 392 | 38, 38, 38, 38, 0, 0, 40, 40, 40, 40, |
393 | 39, 39, 39, 39, 39, 24, 24, 24, 24, 24, | 393 | 40, 40, 39, 39, 39, 39, 39, 39, 0, 0, |
394 | 24, 1, 3, 2, 5, 24, 24, 24, 24, 24, | 394 | 41, 41, 41, 41, 41, 41, 26, 26, 26, 26, |
395 | 23, 23, 9, 0, 9, 0, 10, 0, 7, 0, | 395 | 26, 26, 1, 5, 3, 2, 6, 7, 26, 26, |
396 | 9, 0, 9, 0, 8, 0, 0, 9, 1, 3, | 396 | 26, 26, 26, 25, 25, 11, 0, 11, 0, 12, |
397 | 2, 5, 9, 6, 9, 9, 9, 9, 35, 35, | 397 | 0, 9, 0, 11, 0, 11, 0, 10, 0, 0, |
398 | 35, 35, 35, 35, 35, 35, 34, 0, 22, 0, | 398 | 11, 1, 5, 3, 2, 6, 7, 11, 8, 11, |
399 | 0, 34, 33, 33, 25, 33, 33, 33, 33, 33, | 399 | 11, 11, 11, 37, 37, 37, 37, 37, 37, 37, |
400 | 33, 26, 26, 25, 26, 26, 26, 0, 22, 0, | 400 | 37, 36, 0, 24, 0, 0, 36, 35, 35, 27, |
401 | 401 | ||
402 | 0, 25, 0, 0, 0, 0, 0, 25, 0, 0, | 402 | 35, 35, 35, 35, 35, 35, 28, 28, 27, 28, |
403 | 0, 36, 36, 25, 36, 36, 36, 0, 0, 38, | 403 | 28, 28, 0, 24, 0, 0, 27, 0, 0, 0, |
404 | 38, 25, 38, 38, 38, 37, 37, 25, 37, 37, | 404 | 0, 0, 27, 0, 0, 0, 38, 38, 27, 38, |
405 | 37, 0, 0, 39, 39, 25, 39, 39, 39, 24, | 405 | 38, 38, 0, 0, 40, 40, 27, 40, 40, 40, |
406 | 22, 24, 24, 24, 24, 24, 24, 32, 0, 9, | 406 | 39, 39, 27, 39, 39, 39, 0, 0, 41, 41, |
407 | 9, 6, 9, 9, 9, 9, 9, 35, 35, 35, | 407 | 27, 41, 41, 41, 26, 24, 26, 26, 26, 26, |
408 | 35, 25, 35, 35, 35, 22, 22, 0, 33, 33, | 408 | 26, 26, 34, 0, 11, 11, 8, 11, 11, 11, |
409 | 33, 33, 33, 33, 33, 33, 33, 26, 26, 26, | 409 | 11, 11, 37, 37, 37, 37, 27, 37, 37, 37, |
410 | 26, 26, 26, 22, 0, 0, 0, 0, 0, 0, | 410 | 24, 24, 0, 35, 35, 35, 35, 35, 35, 35, |
411 | 0, 0, 0, 0, 0, 0, 36, 36, 36, 36, | 411 | 35, 35, 28, 28, 28, 28, 28, 28, 24, 0, |
412 | |||
413 | 36, 36, 0, 38, 0, 38, 38, 38, 38, 38, | ||
414 | 38, 37, 37, 37, 37, 37, 37, 0, 39, 0, | ||
415 | 39, 39, 39, 39, 39, 39, 22, 22, 24, 24, | ||
416 | 24, 24, 24, 24, 22, 9, 9, 9, 9, 9, | ||
417 | 9, 35, 35, 35, 35, 35, 35, 35, 35, 0, | ||
418 | 34, 33, 33, 33, 33, 33, 33, 33, 33, 33, | ||
419 | 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, | ||
420 | 0, 0, 0, 0, 0, 0, 0, 0, 36, 36, | ||
421 | 36, 36, 36, 36, 0, 38, 38, 38, 38, 38, | ||
422 | 38, 38, 37, 37, 37, 37, 37, 37, 0, 39, | ||
423 | |||
424 | 39, 39, 39, 39, 39, 39, 24, 24, 24, 24, | ||
425 | 24, 24, 9, 9, 9, 9, 9, 9, 35, 35, | ||
426 | 35, 18, 35, 35, 35, 35, 33, 33, 33, 19, | ||
427 | 33, 33, 33, 21, 33, 26, 26, 26, 26, 26, | ||
428 | 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
429 | 0, 0, 0, 36, 36, 36, 36, 36, 36, 38, | ||
430 | 38, 38, 38, 38, 38, 37, 37, 37, 37, 37, | ||
431 | 37, 39, 39, 39, 39, 39, 39, 24, 24, 24, | ||
432 | 24, 24, 24, 9, 9, 9, 9, 9, 9, 35, | ||
433 | 35, 35, 17, 35, 35, 35, 33, 33, 14, 33, | ||
434 | |||
435 | 11, 13, 12, 26, 26, 14, 11, 13, 12, 0, | ||
436 | 0, 14, 11, 13, 12, 0, 0, 14, 11, 13, | ||
437 | 12, 36, 36, 14, 11, 13, 12, 38, 38, 14, | ||
438 | 11, 13, 12, 37, 37, 14, 11, 13, 12, 39, | ||
439 | 39, 14, 11, 13, 12, 24, 24, 14, 11, 13, | ||
440 | 12, 9, 9, 9, 9, 9, 9, 35, 35, 14, | ||
441 | 11, 13, 12, 33, 33, 20, 26, 26, 0, 0, | ||
442 | 0, 0, 36, 36, 38, 38, 37, 37, 39, 39, | ||
443 | 24, 24, 9, 9, 35, 35, 33, 33, 26, 26, | ||
444 | 0, 0, 0, 0, 36, 36, 38, 38, 37, 37, | ||
445 | |||
446 | 39, 39, 24, 24, 9, 9, 35, 35, 33, 15, | ||
447 | 26, 15, 0, 15, 0, 15, 36, 15, 38, 15, | ||
448 | 37, 15, 39, 15, 24, 15, 9, 9, 35, 15, | ||
449 | 33, 26, 0, 0, 36, 38, 37, 39, 24, 9, | ||
450 | 35, 33, 26, 0, 0, 36, 38, 37, 39, 24, | ||
451 | 9, 35, 33, 26, 0, 0, 36, 38, 37, 39, | ||
452 | 24, 9, 35, 33, 26, 0, 0, 36, 38, 37, | ||
453 | 39, 24, 9, 35, 33, 26, 0, 0, 36, 38, | ||
454 | 37, 39, 24, 9, 35, 16, 16, 16, 16, 16, | ||
455 | 16, 16, 16, 16, 9, 16, 0 | ||
456 | 412 | ||
413 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
414 | 0, 38, 38, 38, 38, 38, 38, 0, 40, 0, | ||
415 | 40, 40, 40, 40, 40, 40, 39, 39, 39, 39, | ||
416 | 39, 39, 0, 41, 0, 41, 41, 41, 41, 41, | ||
417 | 41, 24, 24, 26, 26, 26, 26, 26, 26, 24, | ||
418 | 11, 11, 11, 11, 11, 11, 37, 37, 37, 37, | ||
419 | 37, 37, 37, 37, 0, 36, 35, 35, 35, 35, | ||
420 | 35, 35, 35, 35, 35, 28, 28, 28, 28, 28, | ||
421 | 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
422 | 0, 0, 0, 38, 38, 38, 38, 38, 38, 0, | ||
423 | |||
424 | 40, 40, 40, 40, 40, 40, 40, 39, 39, 39, | ||
425 | 39, 39, 39, 0, 41, 41, 41, 41, 41, 41, | ||
426 | 41, 26, 26, 26, 26, 26, 26, 11, 11, 11, | ||
427 | 11, 11, 11, 37, 37, 37, 20, 37, 37, 37, | ||
428 | 37, 35, 35, 35, 21, 35, 35, 35, 23, 35, | ||
429 | 28, 28, 28, 28, 28, 28, 0, 0, 0, 0, | ||
430 | 0, 0, 0, 0, 0, 0, 0, 0, 38, 38, | ||
431 | 38, 38, 38, 38, 40, 40, 40, 40, 40, 40, | ||
432 | 39, 39, 39, 39, 39, 39, 41, 41, 41, 41, | ||
433 | 41, 41, 26, 26, 26, 26, 26, 26, 11, 11, | ||
434 | |||
435 | 11, 11, 11, 11, 37, 37, 37, 19, 37, 37, | ||
436 | 37, 35, 35, 16, 35, 13, 15, 14, 28, 28, | ||
437 | 16, 13, 15, 14, 0, 0, 16, 13, 15, 14, | ||
438 | 0, 0, 16, 13, 15, 14, 38, 38, 16, 13, | ||
439 | 15, 14, 40, 40, 16, 13, 15, 14, 39, 39, | ||
440 | 16, 13, 15, 14, 41, 41, 16, 13, 15, 14, | ||
441 | 26, 26, 16, 13, 15, 14, 11, 11, 11, 11, | ||
442 | 11, 11, 37, 37, 16, 13, 15, 14, 35, 35, | ||
443 | 22, 28, 28, 0, 0, 0, 0, 38, 38, 40, | ||
444 | 40, 39, 39, 41, 41, 26, 26, 11, 11, 37, | ||
445 | |||
446 | 37, 35, 35, 28, 28, 0, 0, 0, 0, 38, | ||
447 | 38, 40, 40, 39, 39, 41, 41, 26, 26, 11, | ||
448 | 11, 37, 37, 35, 17, 28, 17, 0, 17, 0, | ||
449 | 17, 38, 17, 40, 17, 39, 17, 41, 17, 26, | ||
450 | 17, 11, 11, 37, 17, 35, 28, 0, 0, 38, | ||
451 | 40, 39, 41, 26, 11, 37, 35, 28, 0, 0, | ||
452 | 38, 40, 39, 41, 26, 11, 37, 35, 28, 0, | ||
453 | 0, 38, 40, 39, 41, 26, 11, 37, 35, 28, | ||
454 | 0, 0, 38, 40, 39, 41, 26, 11, 37, 35, | ||
455 | 28, 0, 0, 38, 40, 39, 41, 26, 11, 37, | ||
456 | |||
457 | 18, 18, 18, 18, 18, 18, 18, 18, 18, 11, | ||
458 | 18, 0 | ||
457 | } ; | 459 | } ; |
458 | 460 | ||
459 | static yyconst flex_int32_t yy_ec[256] = | 461 | static yyconst flex_int32_t yy_ec[256] = |
@@ -491,454 +493,472 @@ static yyconst flex_int32_t yy_ec[256] = | |||
491 | static yyconst flex_int32_t yy_meta[59] = | 493 | static yyconst flex_int32_t yy_meta[59] = |
492 | { 0, | 494 | { 0, |
493 | 1, 1, 2, 3, 1, 1, 4, 1, 1, 1, | 495 | 1, 1, 2, 3, 1, 1, 4, 1, 1, 1, |
494 | 5, 6, 5, 5, 7, 8, 1, 1, 1, 9, | 496 | 5, 6, 5, 5, 7, 8, 1, 7, 1, 9, |
495 | 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, | 497 | 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, |
496 | 9, 9, 10, 1, 11, 9, 9, 9, 9, 9, | 498 | 9, 9, 10, 1, 11, 9, 9, 9, 9, 9, |
497 | 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, | 499 | 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, |
498 | 9, 9, 9, 9, 9, 9, 1, 12 | 500 | 9, 9, 9, 9, 9, 9, 1, 12 |
499 | } ; | 501 | } ; |
500 | 502 | ||
501 | static yyconst flex_int16_t yy_base[832] = | 503 | static yyconst flex_int16_t yy_base[847] = |
502 | { 0, | 504 | { 0, |
503 | 0, 0, 58, 0, 115, 165, 215, 265, 316, 0, | 505 | 0, 0, 58, 0, 115, 165, 215, 265, 316, 0, |
504 | 374, 0, 432, 0, 490, 0, 547, 604, 661, 711, | 506 | 374, 0, 432, 0, 490, 0, 547, 604, 661, 711, |
505 | 762, 0, 2156, 2157, 2157, 2157, 2152, 0, 118, 2136, | 507 | 762, 0, 2308, 2309, 2309, 2309, 2304, 0, 118, 2288, |
506 | 2135, 2141, 2133, 115, 118, 116, 120, 124, 140, 131, | 508 | 2287, 2286, 111, 2285, 116, 124, 120, 129, 131, 128, |
507 | 129, 139, 0, 2118, 2109, 2107, 2100, 2105, 2128, 127, | 509 | 144, 139, 140, 0, 2270, 2261, 2259, 2252, 2257, 2280, |
508 | 2157, 2127, 137, 179, 124, 2125, 128, 173, 126, 146, | 510 | 137, 2309, 2279, 127, 183, 124, 171, 2277, 187, 179, |
509 | 153, 118, 158, 2157, 190, 2157, 2157, 2139, 193, 2123, | 511 | 126, 163, 158, 131, 173, 2309, 204, 2309, 2309, 2291, |
510 | 2122, 2128, 2120, 2105, 2096, 2094, 2087, 2092, 2157, 0, | 512 | 210, 2275, 2274, 2273, 197, 2272, 2257, 2248, 2246, 2239, |
511 | 2100, 2091, 2089, 2082, 2087, 2070, 2119, 181, 190, 194, | 513 | 2244, 2309, 0, 2252, 2243, 2241, 2234, 2239, 2222, 218, |
512 | 153, 197, 2157, 0, 2093, 2084, 2082, 2075, 2080, 2063, | 514 | 220, 221, 223, 224, 228, 236, 2309, 0, 2246, 2237, |
513 | 515 | ||
514 | 2112, 191, 199, 200, 201, 203, 2115, 2114, 2113, 2112, | 516 | 2235, 2228, 2233, 2216, 233, 238, 240, 255, 263, 242, |
515 | 212, 209, 222, 217, 228, 226, 233, 208, 239, 240, | 517 | 273, 2269, 2268, 2267, 2266, 283, 285, 289, 293, 287, |
516 | 248, 255, 251, 2111, 270, 251, 552, 254, 565, 575, | 518 | 294, 160, 210, 207, 147, 220, 297, 552, 560, 2265, |
517 | 577, 622, 627, 626, 634, 612, 669, 684, 691, 2157, | 519 | 565, 210, 569, 544, 580, 622, 627, 634, 623, 669, |
518 | 0, 2081, 205, 2071, 2070, 2063, 2068, 2105, 2157, 257, | 520 | 689, 819, 684, 702, 821, 823, 2309, 0, 2235, 266, |
519 | 289, 559, 2157, 2157, 2157, 2157, 2050, 263, 2071, 270, | 521 | 2225, 2224, 2217, 2222, 2259, 2309, 548, 566, 581, 2309, |
520 | 273, 555, 545, 556, 642, 585, 569, 0, 2078, 2064, | 522 | 2309, 2309, 2309, 2309, 2309, 2204, 568, 2225, 626, 610, |
521 | 2061, 222, 2052, 2084, 2157, 290, 2157, 291, 2097, 674, | 523 | 640, 651, 699, 823, 678, 702, 0, 2232, 2218, 2215, |
522 | 680, 2082, 2081, 2080, 283, 564, 554, 608, 262, 2093, | 524 | 550, 2206, 2238, 2309, 577, 2309, 261, 2251, 594, 830, |
523 | 312, 2157, 2068, 2054, 2051, 529, 2042, 0, 2064, 2050, | 525 | 2236, 2235, 2234, 2233, 2232, 575, 580, 634, 710, 599, |
524 | 526 | ||
525 | 2047, 611, 2038, 0, 2030, 2079, 646, 650, 652, 695, | 527 | 2245, 735, 2309, 2220, 2206, 2203, 703, 2194, 0, 2216, |
526 | 593, 0, 2058, 2044, 2041, 661, 2032, 0, 2024, 2073, | 528 | 2202, 2199, 711, 2190, 0, 2182, 681, 827, 830, 831, |
527 | 680, 681, 699, 701, 702, 2076, 2075, 2074, 2073, 733, | 529 | 826, 828, 0, 2211, 2197, 2194, 717, 2185, 0, 2177, |
528 | 819, 2072, 2071, 2070, 2069, 720, 600, 708, 820, 821, | 530 | 740, 832, 834, 833, 853, 854, 2230, 2229, 2228, 2227, |
529 | 724, 2068, 823, 824, 831, 751, 2067, 822, 830, 835, | 531 | 874, 840, 2226, 2225, 2224, 2223, 2222, 2221, 592, 254, |
530 | 839, 843, 847, 845, 846, 858, 880, 870, 881, 889, | 532 | 651, 855, 833, 737, 2220, 877, 897, 898, 878, 2219, |
531 | 891, 898, 903, 2067, 905, 914, 916, 926, 0, 2041, | 533 | 881, 883, 886, 905, 916, 920, 700, 859, 906, 925, |
532 | 2027, 2013, 2023, 2022, 703, 2013, 902, 841, 754, 0, | 534 | 936, 940, 941, 950, 955, 960, 964, 974, 2219, 975, |
533 | 2027, 2157, 910, 919, 905, 913, 933, 934, 937, 940, | 535 | 983, 994, 995, 0, 2193, 2179, 2165, 2175, 2174, 718, |
534 | 935, 2035, 258, 0, 2014, 2018, 2004, 947, 979, 732, | 536 | 2165, 883, 910, 934, 0, 2179, 2309, 979, 971, 940, |
535 | 537 | ||
536 | 934, 2040, 912, 843, 707, 2030, 910, 2157, 2009, 2013, | 538 | 974, 954, 985, 999, 983, 1003, 2187, 968, 0, 2166, |
537 | 1999, 2026, 922, 0, 2005, 2009, 1995, 1990, 0, 861, | 539 | 2170, 2156, 1017, 1036, 583, 1003, 2192, 996, 685, 917, |
538 | 926, 2040, 855, 947, 964, 2020, 941, 0, 1999, 2003, | 540 | 2182, 998, 2309, 2161, 2165, 2151, 2178, 1001, 0, 2157, |
539 | 1989, 1984, 0, 979, 950, 2034, 978, 984, 983, 995, | 541 | 2161, 2147, 2142, 0, 1040, 1041, 946, 1042, 1045, 1043, |
540 | 757, 989, 992, 2037, 996, 571, 997, 1004, 1005, 1014, | 542 | 2173, 1012, 0, 2152, 2156, 2142, 2137, 0, 1055, 1057, |
541 | 1006, 2037, 1021, 1025, 1026, 1039, 1041, 2012, 1010, 1996, | 543 | 1060, 1061, 1062, 1064, 1074, 1087, 1067, 1069, 2191, 1080, |
542 | 1988, 0, 1989, 1993, 1979, 999, 2029, 1973, 1043, 1049, | 544 | 1082, 687, 1090, 1094, 1103, 1112, 2191, 1111, 1125, 1127, |
543 | 1050, 1051, 1058, 1059, 1060, 1070, 1061, 2002, 1992, 1991, | 545 | 1134, 1142, 2166, 1048, 2150, 2142, 0, 2143, 2147, 2133, |
544 | 1973, 1975, 1981, 1087, 1053, 1061, 1062, 813, 1003, 1044, | 546 | 1138, 2183, 2127, 1127, 1141, 1146, 1136, 1149, 1151, 1155, |
545 | 1996, 1986, 1985, 1967, 1969, 1975, 1990, 1980, 1979, 1961, | 547 | 1156, 1158, 2156, 2146, 2145, 2127, 2129, 2135, 1164, 1087, |
546 | 548 | ||
547 | 1963, 1969, 1954, 2004, 1952, 867, 1078, 1089, 1062, 1090, | 549 | 1006, 1135, 1132, 595, 912, 2150, 2140, 2139, 2121, 2123, |
548 | 1093, 1981, 1971, 1970, 1952, 1954, 1960, 1945, 1995, 1943, | 550 | 2129, 2144, 2134, 2133, 2115, 2117, 2123, 2108, 1183, 2107, |
549 | 1094, 1099, 1101, 1100, 1105, 1103, 1117, 1997, 1111, 1114, | 551 | 1185, 1190, 1191, 1192, 1200, 1204, 2136, 2126, 2125, 2107, |
550 | 1118, 1120, 1121, 1122, 1125, 1141, 1127, 1155, 1160, 1165, | 552 | 2109, 2115, 2100, 1205, 2099, 1207, 1208, 1212, 1213, 1214, |
551 | 1174, 1971, 1961, 1960, 1945, 1944, 1940, 1942, 1948, 1933, | 553 | 1222, 1168, 2153, 923, 1084, 1213, 1182, 1106, 1190, 1236, |
552 | 1138, 1151, 1170, 1145, 1173, 1176, 1179, 1178, 1180, 1188, | 554 | 1250, 1251, 1252, 1266, 1267, 1271, 2127, 2117, 2116, 2101, |
553 | 1960, 1942, 1936, 1947, 1942, 1934, 1114, 1173, 1136, 1183, | 555 | 2100, 2096, 2098, 2104, 2089, 1210, 1257, 1230, 1273, 1274, |
554 | 1181, 1179, 1954, 1936, 1930, 1941, 1936, 1928, 1948, 1930, | 556 | 1275, 1276, 1284, 1286, 1288, 2116, 2098, 2092, 2103, 2098, |
555 | 1924, 1935, 1930, 1922, 1914, 1964, 1198, 1184, 1141, 830, | 557 | 2090, 1280, 1177, 1244, 1282, 1285, 1275, 2110, 2092, 2086, |
556 | 1194, 1195, 1940, 1922, 1916, 1927, 1922, 1914, 1906, 1956, | 558 | 2097, 2092, 2084, 2104, 2086, 2080, 2091, 2086, 2078, 2070, |
557 | 559 | ||
558 | 1203, 1197, 1200, 1208, 1222, 1225, 1231, 1232, 1233, 1234, | 560 | 1296, 1306, 1323, 1324, 1325, 1327, 1328, 2097, 2079, 2073, |
559 | 1237, 1238, 1248, 1249, 1257, 1265, 1267, 1282, 1932, 1914, | 561 | 2084, 2079, 2071, 2063, 1330, 1331, 1333, 1337, 1345, 1340, |
560 | 1908, 0, 1918, 1918, 1913, 1905, 1235, 1253, 1270, 1273, | 562 | 1346, 1347, 1309, 1259, 1351, 1354, 1356, 1370, 1385, 1394, |
561 | 1281, 1285, 1287, 1288, 1290, 1919, 1914, 1908, 1911, 1898, | 563 | 1401, 1403, 1408, 2090, 2072, 2066, 0, 2076, 2076, 2071, |
562 | 1909, 1228, 1285, 1283, 1281, 1290, 1291, 1913, 1908, 1902, | 564 | 2063, 1359, 1361, 1379, 1355, 1407, 1410, 1411, 1415, 1416, |
563 | 1905, 1892, 1903, 1907, 1902, 1896, 1899, 1886, 1897, 1303, | 565 | 2077, 2072, 2066, 2069, 2056, 2067, 1398, 1343, 1408, 1404, |
564 | 1297, 1305, 1306, 1310, 1312, 1901, 1896, 1890, 1893, 1880, | 566 | 643, 1409, 2071, 2066, 2060, 2063, 2050, 2061, 2065, 2060, |
565 | 1891, 1320, 1317, 1323, 1328, 1327, 1329, 1335, 1338, 1339, | 567 | 2054, 2057, 2044, 2055, 1420, 1445, 1413, 1447, 1453, 1454, |
566 | 1341, 1342, 1345, 1347, 1356, 1357, 1371, 1392, 1396, 1895, | 568 | 2059, 2054, 2047, 2050, 2035, 2043, 1455, 1459, 1460, 1461, |
567 | 1890, 1884, 0, 1887, 1874, 1885, 1344, 1339, 1359, 1380, | 569 | 1462, 1463, 1471, 1436, 1430, 1192, 1433, 1479, 1482, 1492, |
568 | 570 | ||
569 | 1381, 1382, 1386, 1902, 1878, 0, 0, 0, 0, 1117, | 571 | 1506, 1519, 1520, 1528, 2047, 2040, 2031, 0, 2034, 2019, |
570 | 1357, 1906, 1905, 1904, 1903, 1896, 1872, 2157, 2157, 2157, | 572 | 2027, 1486, 1496, 1505, 1506, 1510, 1516, 1524, 2044, 2018, |
571 | 2157, 1894, 1870, 0, 0, 0, 0, 1240, 1353, 1908, | 573 | 0, 0, 0, 0, 1281, 1517, 2043, 2042, 2039, 2035, |
572 | 1907, 1906, 1905, 1888, 1864, 0, 0, 0, 0, 1399, | 574 | 2023, 1994, 2309, 2309, 2309, 2309, 2005, 1981, 0, 0, |
573 | 1400, 1902, 1901, 1900, 1899, 1405, 1372, 1902, 1901, 1900, | 575 | 0, 0, 1538, 1528, 1530, 1534, 1537, 1540, 1981, 1957, |
574 | 1899, 1415, 1419, 1427, 1434, 1439, 1446, 1878, 1854, 0, | 576 | 0, 0, 0, 0, 1557, 1558, 1559, 1560, 1561, 1563, |
575 | 0, 0, 0, 1424, 1433, 1427, 1867, 1856, 1394, 1426, | 577 | 1568, 1547, 1988, 1959, 1954, 1948, 1580, 1581, 1582, 1590, |
576 | 1863, 1849, 1858, 1845, 1445, 1409, 1851, 1840, 1451, 1449, | 578 | 1592, 1594, 1923, 1863, 0, 0, 0, 0, 1598, 1599, |
577 | 1456, 1459, 1467, 1476, 1847, 1833, 1463, 1456, 1848, 1819, | 579 | 1600, 1874, 1858, 1350, 1584, 1803, 1792, 1801, 1790, 1603, |
578 | 1125, 1454, 1841, 1814, 1837, 1807, 1470, 1457, 1827, 1795, | 580 | 1601, 1799, 1788, 1604, 1602, 1610, 1609, 1643, 1644, 1797, |
579 | 581 | ||
580 | 1472, 1476, 1488, 1482, 1501, 1510, 1809, 1782, 1495, 1486, | 582 | 1786, 1611, 1630, 1800, 1773, 1010, 1606, 1798, 1771, 1795, |
581 | 1789, 0, 1503, 1792, 1776, 2157, 1747, 0, 1504, 1756, | 583 | 1768, 1640, 1646, 1793, 1766, 1648, 1649, 1614, 1379, 1667, |
582 | 1736, 0, 1515, 1745, 1483, 1712, 1529, 1537, 1690, 0, | 584 | 1674, 1791, 1764, 1647, 1653, 1793, 0, 1352, 1796, 1791, |
583 | 1516, 1675, 1513, 1610, 1609, 1522, 1608, 1525, 1491, 1546, | 585 | 2309, 1790, 0, 1677, 1652, 1789, 0, 1681, 1676, 1480, |
584 | 1607, 1533, 1612, 1475, 1611, 1609, 1534, 1608, 1540, 1535, | 586 | 1805, 1685, 1702, 1786, 0, 1682, 1775, 1679, 1774, 1769, |
585 | 1560, 1607, 1546, 1604, 1232, 1602, 1601, 1549, 1599, 1560, | 587 | 1696, 1768, 1698, 1688, 1715, 1765, 1706, 1765, 1472, 1763, |
586 | 1557, 1580, 1597, 1562, 1596, 1553, 1595, 1593, 1566, 1592, | 588 | 1757, 1714, 1753, 1717, 1719, 1729, 1703, 1722, 1685, 1645, |
587 | 1567, 1574, 1588, 1591, 1574, 1581, 1226, 1575, 1572, 1582, | 589 | 1604, 1546, 1726, 1466, 1733, 1635, 1752, 1403, 1739, 1349, |
588 | 1485, 1590, 1595, 1600, 1381, 1593, 0, 1392, 2157, 0, | 590 | 1725, 1269, 1222, 1740, 1217, 1749, 1758, 1768, 1155, 1755, |
589 | 1347, 0, 1029, 1018, 1607, 0, 2157, 1641, 1653, 1665, | 591 | 1148, 1481, 1096, 1001, 1761, 866, 1762, 1763, 1792, 834, |
590 | 592 | ||
591 | 1677, 1689, 893, 1698, 1704, 1713, 1725, 1737, 1745, 1751, | 593 | 1768, 0, 742, 2309, 0, 1764, 0, 1778, 678, 1801, |
592 | 1756, 1762, 1771, 1783, 1795, 1807, 1819, 1831, 1839, 1845, | 594 | 0, 2309, 1835, 1847, 1859, 1871, 1883, 550, 1892, 1898, |
593 | 1848, 730, 581, 550, 1855, 289, 1863, 286, 1871, 1879, | 595 | 1907, 1919, 1931, 1939, 1945, 1950, 1956, 1965, 1977, 1989, |
594 | 1887 | 596 | 2001, 2013, 2025, 2033, 2039, 2042, 306, 304, 301, 2049, |
597 | 213, 2057, 136, 2065, 2073, 2081 | ||
595 | } ; | 598 | } ; |
596 | 599 | ||
597 | static yyconst flex_int16_t yy_def[832] = | 600 | static yyconst flex_int16_t yy_def[847] = |
598 | { 0, | 601 | { 0, |
599 | 797, 1, 797, 3, 798, 798, 799, 799, 797, 9, | 602 | 812, 1, 812, 3, 813, 813, 814, 814, 812, 9, |
600 | 797, 11, 797, 13, 797, 15, 800, 800, 801, 801, | 603 | 812, 11, 812, 13, 812, 15, 815, 815, 816, 816, |
601 | 797, 21, 797, 797, 797, 797, 802, 803, 797, 797, | 604 | 812, 21, 812, 812, 812, 812, 817, 818, 812, 812, |
602 | 797, 797, 797, 804, 804, 804, 804, 804, 804, 804, | 605 | 812, 812, 812, 812, 819, 819, 819, 819, 819, 819, |
603 | 804, 804, 805, 805, 805, 805, 805, 805, 806, 806, | 606 | 819, 819, 819, 820, 820, 820, 820, 820, 820, 821, |
604 | 797, 806, 807, 806, 806, 797, 806, 806, 806, 806, | 607 | 821, 812, 821, 822, 821, 821, 821, 812, 821, 821, |
605 | 806, 806, 806, 797, 808, 797, 797, 802, 797, 797, | 608 | 821, 821, 821, 821, 821, 812, 823, 812, 812, 817, |
606 | 797, 797, 797, 797, 797, 797, 797, 797, 797, 809, | 609 | 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, |
607 | 809, 809, 809, 809, 809, 797, 810, 810, 810, 810, | 610 | 812, 812, 824, 824, 824, 824, 824, 824, 812, 825, |
608 | 810, 810, 797, 811, 811, 811, 811, 811, 811, 797, | 611 | 825, 825, 825, 825, 825, 825, 812, 826, 826, 826, |
609 | 612 | ||
610 | 812, 812, 812, 812, 812, 812, 813, 813, 813, 814, | 613 | 826, 826, 826, 812, 827, 827, 827, 827, 827, 827, |
611 | 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, | 614 | 827, 828, 828, 828, 829, 828, 828, 828, 828, 828, |
612 | 797, 815, 797, 797, 815, 816, 817, 818, 815, 815, | 615 | 828, 828, 828, 828, 828, 828, 812, 830, 812, 812, |
613 | 815, 815, 815, 815, 815, 815, 815, 815, 815, 797, | 616 | 830, 831, 832, 833, 830, 830, 830, 830, 830, 830, |
614 | 819, 819, 819, 819, 819, 819, 819, 802, 797, 820, | 617 | 830, 830, 830, 830, 830, 830, 812, 834, 834, 834, |
615 | 797, 797, 797, 797, 797, 797, 797, 804, 821, 804, | 618 | 834, 834, 834, 834, 817, 812, 835, 812, 812, 812, |
616 | 804, 804, 804, 804, 804, 804, 804, 805, 805, 805, | 619 | 812, 812, 812, 812, 812, 812, 819, 836, 819, 819, |
617 | 805, 805, 805, 806, 797, 806, 797, 807, 802, 806, | 620 | 819, 819, 819, 819, 819, 819, 820, 820, 820, 820, |
618 | 806, 806, 806, 806, 806, 806, 806, 806, 806, 808, | 621 | 820, 820, 821, 812, 821, 812, 822, 817, 821, 821, |
619 | 808, 797, 797, 797, 797, 797, 797, 809, 809, 809, | 622 | 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, |
620 | 623 | ||
621 | 809, 809, 809, 822, 797, 810, 810, 810, 810, 810, | 624 | 823, 823, 812, 812, 812, 812, 812, 812, 824, 824, |
622 | 810, 811, 811, 811, 811, 811, 811, 823, 797, 812, | 625 | 824, 824, 824, 824, 837, 812, 825, 825, 825, 825, |
623 | 812, 812, 812, 812, 812, 813, 797, 814, 797, 813, | 626 | 825, 825, 826, 826, 826, 826, 826, 826, 838, 812, |
624 | 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, | 627 | 827, 827, 827, 827, 827, 827, 828, 812, 829, 812, |
625 | 797, 797, 815, 815, 815, 797, 797, 816, 816, 816, | 628 | 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, |
626 | 817, 817, 817, 818, 818, 818, 815, 815, 815, 815, | 629 | 828, 828, 828, 812, 812, 830, 830, 830, 812, 812, |
627 | 815, 815, 815, 797, 815, 815, 815, 815, 819, 819, | 630 | 831, 831, 831, 832, 832, 832, 833, 833, 833, 830, |
628 | 819, 819, 819, 819, 819, 819, 820, 797, 797, 824, | 631 | 830, 830, 830, 830, 830, 830, 830, 830, 812, 830, |
629 | 821, 797, 804, 804, 804, 804, 804, 804, 804, 804, | 632 | 830, 830, 830, 834, 834, 834, 834, 834, 834, 834, |
630 | 804, 805, 805, 805, 805, 805, 805, 806, 806, 806, | 633 | 834, 835, 812, 812, 839, 836, 812, 819, 819, 819, |
631 | 634 | ||
632 | 806, 806, 806, 806, 806, 797, 797, 797, 797, 797, | 635 | 819, 819, 819, 819, 819, 819, 820, 820, 820, 820, |
633 | 797, 809, 809, 809, 809, 809, 809, 825, 826, 810, | 636 | 820, 820, 821, 821, 821, 821, 821, 821, 821, 821, |
634 | 810, 810, 810, 810, 810, 811, 811, 811, 811, 811, | 637 | 812, 812, 812, 812, 812, 812, 824, 824, 824, 824, |
635 | 811, 827, 828, 812, 812, 812, 812, 812, 812, 813, | 638 | 824, 824, 840, 841, 825, 825, 825, 825, 825, 825, |
636 | 813, 813, 813, 813, 813, 813, 813, 815, 815, 815, | 639 | 826, 826, 826, 826, 826, 826, 842, 843, 827, 827, |
637 | 815, 797, 815, 815, 815, 815, 815, 819, 819, 819, | 640 | 827, 827, 827, 827, 828, 828, 828, 828, 828, 828, |
638 | 819, 819, 819, 819, 819, 797, 797, 829, 804, 804, | 641 | 828, 828, 830, 830, 830, 830, 812, 830, 830, 830, |
639 | 804, 804, 804, 804, 804, 804, 804, 805, 805, 805, | 642 | 830, 830, 834, 834, 834, 834, 834, 834, 834, 834, |
640 | 805, 805, 805, 806, 806, 806, 806, 806, 806, 806, | 643 | 812, 812, 844, 819, 819, 819, 819, 819, 819, 819, |
641 | 797, 797, 797, 797, 797, 797, 809, 809, 809, 809, | 644 | 819, 819, 820, 820, 820, 820, 820, 820, 821, 821, |
642 | 645 | ||
643 | 809, 809, 825, 810, 830, 810, 810, 810, 810, 810, | 646 | 821, 821, 821, 821, 821, 812, 812, 812, 812, 812, |
644 | 810, 811, 811, 811, 811, 811, 811, 827, 812, 831, | 647 | 812, 824, 824, 824, 824, 824, 824, 840, 825, 845, |
645 | 812, 812, 812, 812, 812, 812, 813, 797, 813, 813, | 648 | 825, 825, 825, 825, 825, 825, 826, 826, 826, 826, |
646 | 813, 813, 813, 813, 815, 815, 815, 815, 815, 815, | 649 | 826, 826, 842, 827, 846, 827, 827, 827, 827, 827, |
647 | 815, 819, 819, 819, 819, 819, 819, 819, 819, 829, | 650 | 827, 828, 812, 828, 828, 828, 828, 828, 828, 830, |
648 | 820, 804, 804, 804, 804, 804, 804, 804, 804, 804, | 651 | 830, 830, 830, 830, 830, 830, 834, 834, 834, 834, |
649 | 805, 805, 805, 805, 805, 805, 806, 806, 806, 806, | 652 | 834, 834, 834, 834, 844, 835, 819, 819, 819, 819, |
650 | 806, 806, 797, 797, 797, 797, 797, 797, 809, 809, | 653 | 819, 819, 819, 819, 819, 820, 820, 820, 820, 820, |
651 | 809, 809, 809, 809, 830, 810, 810, 810, 810, 810, | 654 | 820, 821, 821, 821, 821, 821, 821, 812, 812, 812, |
652 | 810, 810, 811, 811, 811, 811, 811, 811, 831, 812, | 655 | 812, 812, 812, 824, 824, 824, 824, 824, 824, 845, |
653 | 656 | ||
654 | 812, 812, 812, 812, 812, 812, 813, 813, 813, 813, | 657 | 825, 825, 825, 825, 825, 825, 825, 826, 826, 826, |
655 | 813, 813, 815, 815, 815, 815, 815, 815, 819, 819, | 658 | 826, 826, 826, 846, 827, 827, 827, 827, 827, 827, |
656 | 819, 819, 819, 819, 819, 819, 804, 804, 804, 804, | 659 | 827, 828, 828, 828, 828, 828, 828, 830, 830, 830, |
657 | 804, 804, 804, 804, 804, 805, 805, 805, 805, 805, | 660 | 830, 830, 830, 834, 834, 834, 834, 834, 834, 834, |
658 | 805, 806, 806, 806, 806, 806, 806, 797, 797, 797, | 661 | 834, 819, 819, 819, 819, 819, 819, 819, 819, 819, |
659 | 797, 797, 797, 809, 809, 809, 809, 809, 809, 810, | 662 | 820, 820, 820, 820, 820, 820, 821, 821, 821, 821, |
660 | 810, 810, 810, 810, 810, 811, 811, 811, 811, 811, | 663 | 821, 821, 812, 812, 812, 812, 812, 812, 824, 824, |
661 | 811, 812, 812, 812, 812, 812, 812, 813, 813, 813, | 664 | 824, 824, 824, 824, 825, 825, 825, 825, 825, 825, |
662 | 813, 813, 813, 815, 815, 815, 815, 815, 815, 819, | 665 | 826, 826, 826, 826, 826, 826, 827, 827, 827, 827, |
663 | 819, 819, 819, 819, 819, 819, 804, 804, 804, 804, | 666 | 827, 827, 828, 828, 828, 828, 828, 828, 830, 830, |
664 | 667 | ||
665 | 804, 804, 804, 805, 805, 805, 805, 805, 805, 806, | 668 | 830, 830, 830, 830, 834, 834, 834, 834, 834, 834, |
666 | 806, 806, 806, 806, 806, 797, 797, 797, 797, 797, | 669 | 834, 819, 819, 819, 819, 819, 819, 819, 820, 820, |
667 | 797, 809, 809, 809, 809, 809, 809, 810, 810, 810, | 670 | 820, 820, 820, 820, 821, 821, 821, 821, 821, 821, |
668 | 810, 810, 810, 811, 811, 811, 811, 811, 811, 812, | 671 | 812, 812, 812, 812, 812, 812, 824, 824, 824, 824, |
669 | 812, 812, 812, 812, 812, 813, 813, 813, 813, 813, | 672 | 824, 824, 825, 825, 825, 825, 825, 825, 826, 826, |
670 | 813, 815, 815, 815, 815, 815, 815, 819, 819, 819, | 673 | 826, 826, 826, 826, 827, 827, 827, 827, 827, 827, |
671 | 819, 819, 819, 804, 804, 804, 805, 805, 806, 806, | 674 | 828, 828, 828, 828, 828, 828, 830, 830, 830, 830, |
672 | 797, 797, 809, 809, 810, 810, 811, 811, 812, 812, | 675 | 830, 830, 834, 834, 834, 834, 834, 834, 819, 819, |
673 | 813, 813, 815, 815, 819, 819, 804, 804, 805, 805, | 676 | 819, 820, 820, 821, 821, 812, 812, 824, 824, 825, |
674 | 806, 806, 797, 797, 809, 809, 810, 810, 811, 811, | 677 | 825, 826, 826, 827, 827, 828, 828, 830, 830, 834, |
675 | 678 | ||
676 | 812, 812, 813, 813, 815, 815, 819, 819, 804, 804, | 679 | 834, 819, 819, 820, 820, 821, 821, 812, 812, 824, |
677 | 805, 805, 806, 806, 797, 797, 809, 809, 810, 810, | 680 | 824, 825, 825, 826, 826, 827, 827, 828, 828, 830, |
678 | 811, 811, 812, 812, 813, 813, 815, 815, 819, 819, | 681 | 830, 834, 834, 819, 819, 820, 820, 821, 821, 812, |
679 | 804, 805, 806, 797, 809, 810, 811, 812, 813, 815, | 682 | 812, 824, 824, 825, 825, 826, 826, 827, 827, 828, |
680 | 819, 804, 805, 806, 797, 809, 810, 811, 812, 813, | 683 | 828, 830, 830, 834, 834, 819, 820, 821, 812, 824, |
681 | 815, 819, 804, 805, 806, 797, 809, 810, 811, 812, | 684 | 825, 826, 827, 828, 830, 834, 819, 820, 821, 812, |
682 | 813, 815, 819, 804, 805, 806, 797, 809, 810, 811, | 685 | 824, 825, 826, 827, 828, 830, 834, 819, 820, 821, |
683 | 812, 813, 815, 819, 804, 805, 806, 797, 809, 810, | 686 | 812, 824, 825, 826, 827, 828, 830, 834, 819, 820, |
684 | 811, 812, 813, 815, 819, 804, 805, 806, 797, 809, | 687 | 821, 812, 824, 825, 826, 827, 828, 830, 834, 819, |
685 | 810, 811, 812, 813, 815, 819, 0, 797, 797, 797, | 688 | 820, 821, 812, 824, 825, 826, 827, 828, 830, 834, |
686 | 689 | ||
687 | 797, 797, 797, 797, 797, 797, 797, 797, 797, 797, | 690 | 819, 820, 821, 812, 824, 825, 826, 827, 828, 830, |
688 | 797, 797, 797, 797, 797, 797, 797, 797, 797, 797, | 691 | 834, 0, 812, 812, 812, 812, 812, 812, 812, 812, |
689 | 797, 797, 797, 797, 797, 797, 797, 797, 797, 797, | 692 | 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, |
690 | 797 | 693 | 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, |
694 | 812, 812, 812, 812, 812, 812 | ||
691 | } ; | 695 | } ; |
692 | 696 | ||
693 | static yyconst flex_int16_t yy_nxt[2216] = | 697 | static yyconst flex_int16_t yy_nxt[2368] = |
694 | { 0, | 698 | { 0, |
695 | 24, 25, 26, 25, 24, 27, 28, 24, 29, 24, | 699 | 24, 25, 26, 25, 24, 27, 28, 24, 29, 24, |
696 | 30, 24, 24, 24, 24, 24, 31, 32, 33, 34, | 700 | 30, 24, 24, 31, 24, 24, 32, 33, 34, 35, |
697 | 34, 35, 34, 34, 34, 34, 34, 34, 34, 34, | 701 | 35, 36, 35, 35, 35, 35, 35, 35, 35, 35, |
698 | 34, 34, 24, 24, 24, 34, 36, 34, 34, 37, | 702 | 35, 35, 24, 24, 24, 35, 37, 35, 35, 38, |
699 | 38, 39, 34, 40, 34, 34, 34, 34, 41, 34, | 703 | 39, 40, 35, 41, 35, 35, 35, 35, 42, 35, |
700 | 42, 34, 34, 34, 34, 34, 24, 24, 24, 25, | 704 | 43, 35, 35, 35, 35, 35, 24, 24, 24, 25, |
701 | 26, 25, 24, 27, 24, 24, 29, 24, 30, 24, | 705 | 26, 25, 24, 27, 24, 24, 29, 24, 30, 24, |
702 | 24, 24, 24, 24, 31, 32, 33, 43, 43, 44, | 706 | 24, 31, 24, 24, 32, 33, 34, 44, 44, 45, |
703 | 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, | 707 | 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, |
704 | 24, 24, 24, 43, 45, 43, 43, 46, 43, 43, | 708 | 24, 24, 24, 44, 46, 44, 44, 47, 44, 44, |
705 | 709 | ||
706 | 43, 47, 43, 43, 43, 43, 43, 43, 48, 43, | 710 | 44, 48, 44, 44, 44, 44, 44, 44, 49, 44, |
707 | 43, 43, 43, 43, 24, 24, 50, 51, 52, 151, | 711 | 44, 44, 44, 44, 24, 24, 51, 52, 53, 158, |
708 | 53, 157, 157, 54, 157, 55, 157, 152, 176, 177, | 712 | 54, 163, 166, 55, 164, 56, 166, 159, 57, 156, |
709 | 157, 56, 57, 58, 175, 157, 59, 157, 183, 149, | 713 | 166, 58, 59, 60, 166, 166, 61, 166, 185, 186, |
710 | 175, 182, 175, 175, 175, 157, 157, 159, 159, 160, | 714 | 184, 191, 184, 188, 435, 166, 166, 184, 168, 238, |
711 | 159, 60, 159, 179, 61, 161, 159, 185, 62, 205, | 715 | 166, 62, 168, 184, 63, 169, 168, 196, 64, 170, |
712 | 162, 159, 175, 159, 188, 63, 50, 51, 52, 175, | 716 | 168, 168, 238, 168, 173, 65, 51, 52, 53, 171, |
713 | 53, 159, 159, 54, 175, 55, 164, 165, 163, 167, | 717 | 54, 168, 168, 55, 184, 56, 168, 199, 57, 184, |
714 | 180, 56, 57, 58, 166, 186, 59, 205, 181, 175, | 718 | 176, 58, 59, 60, 189, 172, 61, 184, 192, 184, |
715 | 184, 191, 192, 187, 151, 175, 205, 219, 189, 210, | 719 | 174, 249, 190, 252, 175, 184, 195, 193, 198, 184, |
716 | 720 | ||
717 | 205, 60, 152, 205, 61, 219, 219, 219, 62, 219, | 721 | 194, 62, 197, 184, 63, 202, 203, 163, 64, 238, |
718 | 227, 227, 207, 230, 227, 63, 65, 66, 67, 227, | 722 | 164, 158, 238, 200, 262, 65, 67, 68, 69, 159, |
719 | 68, 231, 221, 69, 227, 70, 232, 234, 227, 208, | 723 | 70, 420, 238, 71, 216, 72, 216, 216, 73, 216, |
720 | 227, 71, 72, 73, 209, 227, 74, 211, 222, 233, | 724 | 216, 74, 75, 76, 216, 161, 77, 812, 812, 230, |
721 | 223, 227, 227, 225, 271, 235, 272, 224, 238, 241, | 725 | 812, 812, 216, 263, 230, 812, 230, 251, 230, 250, |
722 | 242, 75, 246, 247, 76, 249, 244, 236, 77, 244, | 726 | 161, 78, 218, 812, 79, 812, 238, 812, 80, 812, |
723 | 295, 255, 244, 157, 296, 78, 65, 66, 67, 157, | 727 | 253, 230, 219, 156, 220, 81, 67, 68, 69, 230, |
724 | 68, 244, 237, 69, 244, 70, 157, 244, 175, 157, | 728 | 70, 232, 812, 71, 221, 72, 222, 188, 73, 230, |
725 | 240, 71, 72, 73, 250, 239, 74, 256, 245, 159, | 729 | 812, 74, 75, 76, 241, 238, 77, 238, 235, 238, |
726 | 151, 176, 177, 149, 420, 159, 283, 405, 152, 175, | 730 | 812, 238, 242, 358, 233, 238, 238, 246, 254, 255, |
727 | 731 | ||
728 | 379, 75, 159, 245, 76, 159, 175, 179, 77, 300, | 732 | 247, 78, 243, 234, 79, 286, 244, 287, 80, 383, |
729 | 380, 305, 284, 191, 192, 78, 24, 25, 79, 25, | 733 | 245, 248, 347, 236, 333, 81, 24, 25, 82, 25, |
730 | 24, 27, 24, 24, 29, 24, 30, 24, 24, 24, | 734 | 24, 27, 24, 24, 29, 24, 30, 24, 24, 31, |
731 | 24, 24, 31, 32, 33, 80, 80, 81, 80, 80, | 735 | 24, 24, 32, 33, 34, 83, 83, 84, 83, 83, |
732 | 80, 80, 80, 80, 80, 80, 80, 80, 24, 24, | 736 | 83, 83, 83, 83, 83, 83, 83, 83, 24, 24, |
733 | 24, 80, 82, 80, 80, 83, 80, 80, 80, 84, | 737 | 24, 83, 85, 83, 83, 86, 83, 83, 83, 87, |
734 | 80, 80, 80, 80, 80, 80, 85, 80, 80, 80, | 738 | 83, 83, 83, 83, 83, 83, 88, 83, 83, 83, |
735 | 80, 80, 24, 24, 24, 25, 26, 25, 24, 27, | 739 | 83, 83, 24, 24, 24, 25, 26, 25, 24, 27, |
736 | 86, 24, 29, 24, 30, 24, 24, 87, 87, 24, | 740 | 89, 24, 29, 24, 30, 24, 24, 90, 91, 24, |
737 | 31, 32, 33, 87, 87, 88, 87, 87, 87, 87, | 741 | 32, 33, 34, 91, 91, 92, 91, 91, 91, 91, |
738 | 742 | ||
739 | 87, 87, 87, 87, 87, 87, 24, 24, 24, 87, | 743 | 91, 91, 91, 91, 91, 91, 24, 24, 24, 91, |
740 | 89, 87, 87, 90, 87, 87, 87, 91, 87, 87, | 744 | 93, 91, 91, 94, 91, 91, 91, 95, 91, 91, |
741 | 87, 87, 87, 87, 92, 87, 87, 87, 87, 87, | 745 | 91, 91, 91, 91, 96, 91, 91, 91, 91, 91, |
742 | 24, 24, 24, 25, 93, 25, 24, 27, 24, 24, | 746 | 24, 24, 24, 25, 97, 25, 24, 27, 24, 24, |
743 | 29, 24, 30, 24, 24, 24, 24, 24, 31, 32, | 747 | 29, 24, 30, 24, 24, 31, 24, 24, 32, 33, |
744 | 33, 94, 94, 95, 94, 94, 94, 94, 94, 94, | 748 | 34, 98, 98, 99, 98, 98, 98, 98, 98, 98, |
745 | 94, 94, 94, 94, 24, 24, 24, 94, 96, 94, | 749 | 98, 98, 98, 98, 24, 24, 24, 98, 100, 98, |
746 | 94, 97, 94, 94, 94, 98, 94, 94, 94, 94, | 750 | 98, 101, 98, 98, 98, 102, 98, 98, 98, 98, |
747 | 94, 94, 99, 94, 94, 94, 94, 94, 24, 24, | 751 | 98, 98, 103, 98, 98, 98, 98, 98, 24, 24, |
748 | 24, 25, 26, 25, 24, 27, 100, 24, 29, 24, | 752 | 24, 25, 26, 25, 24, 27, 104, 24, 29, 24, |
749 | 753 | ||
750 | 30, 24, 24, 101, 101, 24, 31, 32, 33, 101, | 754 | 30, 24, 24, 105, 106, 24, 32, 33, 34, 106, |
751 | 101, 102, 101, 101, 101, 101, 101, 101, 101, 101, | 755 | 106, 107, 106, 106, 106, 106, 106, 106, 106, 106, |
752 | 101, 101, 24, 24, 24, 101, 103, 101, 101, 104, | 756 | 106, 106, 24, 24, 24, 106, 108, 106, 106, 109, |
753 | 101, 101, 101, 105, 101, 101, 101, 101, 101, 101, | 757 | 106, 106, 106, 110, 106, 106, 106, 106, 106, 106, |
754 | 106, 101, 101, 101, 101, 101, 24, 24, 108, 109, | 758 | 111, 106, 106, 106, 106, 106, 24, 24, 113, 114, |
755 | 108, 157, 110, 252, 149, 111, 252, 112, 368, 252, | 759 | 113, 268, 115, 257, 166, 116, 257, 117, 157, 257, |
756 | 278, 157, 157, 113, 114, 115, 257, 309, 116, 244, | 760 | 118, 259, 260, 119, 120, 121, 257, 158, 122, 257, |
757 | 175, 310, 244, 227, 258, 157, 244, 159, 244, 244, | 761 | 265, 156, 257, 265, 166, 159, 265, 269, 185, 186, |
758 | 175, 244, 244, 117, 244, 253, 118, 159, 159, 332, | 762 | 168, 270, 293, 123, 257, 258, 124, 257, 310, 271, |
759 | 119, 157, 259, 286, 260, 302, 285, 120, 245, 205, | 763 | 125, 184, 311, 184, 238, 189, 184, 126, 258, 184, |
760 | 764 | ||
761 | 287, 159, 227, 301, 121, 108, 109, 108, 245, 110, | 765 | 168, 315, 266, 190, 127, 113, 114, 113, 400, 115, |
762 | 245, 433, 111, 244, 112, 279, 244, 159, 291, 244, | 766 | 184, 184, 116, 258, 117, 184, 166, 118, 357, 316, |
763 | 113, 114, 115, 244, 175, 116, 244, 244, 244, 244, | 767 | 119, 120, 121, 257, 257, 122, 257, 257, 257, 257, |
764 | 244, 244, 261, 244, 244, 244, 264, 290, 244, 343, | 768 | 257, 257, 166, 275, 257, 257, 276, 294, 257, 272, |
765 | 117, 244, 325, 118, 262, 245, 303, 119, 157, 315, | 769 | 123, 257, 168, 124, 273, 486, 166, 125, 320, 299, |
766 | 304, 265, 205, 316, 120, 245, 205, 263, 205, 245, | 770 | 184, 274, 298, 238, 126, 258, 258, 166, 168, 184, |
767 | 245, 121, 123, 124, 125, 126, 127, 245, 128, 129, | 771 | 258, 127, 129, 130, 131, 132, 133, 258, 134, 135, |
768 | 244, 130, 320, 244, 159, 180, 244, 131, 132, 133, | 772 | 257, 136, 168, 257, 137, 317, 257, 138, 139, 140, |
769 | 288, 298, 134, 181, 289, 244, 219, 219, 244, 321, | 773 | 238, 300, 141, 168, 166, 257, 277, 216, 257, 238, |
770 | 175, 244, 244, 322, 135, 244, 175, 136, 244, 329, | 774 | 257, 257, 359, 257, 142, 629, 257, 143, 812, 301, |
771 | 775 | ||
772 | 137, 205, 245, 330, 138, 219, 334, 219, 219, 266, | 776 | 144, 184, 258, 257, 145, 166, 257, 268, 166, 257, |
773 | 227, 139, 123, 124, 125, 126, 127, 245, 128, 129, | 777 | 168, 146, 129, 130, 131, 132, 133, 258, 134, 135, |
774 | 335, 130, 227, 175, 245, 241, 242, 131, 132, 133, | 778 | 278, 136, 258, 280, 137, 404, 184, 138, 139, 140, |
775 | 267, 268, 134, 323, 230, 227, 299, 324, 318, 337, | 779 | 305, 168, 141, 269, 168, 258, 202, 203, 254, 255, |
776 | 336, 363, 231, 338, 135, 364, 342, 136, 175, 344, | 780 | 449, 324, 281, 302, 142, 325, 230, 143, 318, 330, |
777 | 137, 339, 246, 247, 138, 366, 367, 385, 427, 428, | 781 | 144, 306, 319, 331, 145, 344, 378, 812, 184, 345, |
778 | 390, 139, 24, 25, 140, 25, 24, 27, 24, 24, | 782 | 379, 146, 24, 25, 147, 25, 24, 27, 24, 24, |
779 | 29, 24, 30, 24, 24, 24, 24, 24, 31, 32, | 783 | 29, 24, 30, 24, 24, 31, 24, 24, 32, 33, |
780 | 33, 141, 141, 142, 141, 141, 141, 141, 141, 141, | 784 | 34, 148, 148, 149, 148, 148, 148, 148, 148, 148, |
781 | 141, 141, 141, 141, 24, 24, 24, 141, 143, 144, | 785 | 148, 148, 148, 148, 24, 24, 24, 148, 150, 151, |
782 | 786 | ||
783 | 141, 145, 141, 141, 141, 146, 141, 141, 141, 141, | 787 | 148, 152, 148, 148, 148, 153, 148, 148, 148, 148, |
784 | 141, 141, 147, 141, 141, 141, 141, 141, 24, 24, | 788 | 148, 148, 154, 148, 148, 148, 148, 148, 24, 24, |
785 | 340, 227, 227, 227, 244, 244, 249, 244, 244, 175, | 789 | 257, 279, 257, 257, 257, 257, 257, 257, 257, 166, |
786 | 244, 244, 244, 244, 249, 244, 205, 248, 244, 249, | 790 | 257, 313, 216, 216, 216, 238, 216, 216, 230, 230, |
787 | 252, 149, 278, 252, 252, 149, 252, 252, 252, 348, | 791 | 230, 355, 238, 812, 812, 812, 184, 812, 812, 812, |
788 | 252, 252, 255, 255, 252, 250, 245, 245, 345, 175, | 792 | 812, 812, 258, 335, 258, 168, 258, 238, 349, 230, |
789 | 254, 205, 346, 250, 245, 255, 470, 205, 250, 563, | 793 | 230, 303, 811, 283, 338, 304, 268, 282, 339, 336, |
790 | 347, 349, 253, 205, 244, 341, 253, 244, 256, 256, | 794 | 812, 812, 337, 350, 351, 241, 238, 340, 257, 259, |
791 | 253, 257, 244, 389, 244, 244, 406, 244, 244, 258, | 795 | 260, 257, 362, 242, 257, 262, 314, 262, 261, 166, |
792 | 244, 256, 244, 244, 487, 244, 244, 279, 244, 244, | 796 | 262, 352, 269, 360, 807, 353, 356, 361, 257, 257, |
793 | 797 | ||
794 | 409, 150, 244, 245, 244, 244, 244, 244, 157, 244, | 798 | 257, 257, 257, 354, 257, 257, 265, 156, 267, 265, |
795 | 244, 157, 244, 245, 245, 244, 157, 244, 244, 157, | 799 | 258, 293, 265, 268, 263, 168, 263, 265, 156, 263, |
796 | 244, 244, 245, 244, 245, 157, 350, 244, 175, 351, | 800 | 265, 265, 363, 265, 265, 238, 270, 265, 184, 257, |
797 | 244, 245, 205, 244, 159, 369, 245, 159, 245, 157, | 801 | 258, 258, 257, 184, 271, 381, 382, 364, 266, 269, |
798 | 157, 157, 159, 157, 353, 159, 157, 245, 298, 245, | 802 | 257, 257, 257, 257, 257, 257, 166, 257, 257, 266, |
799 | 175, 159, 392, 205, 355, 354, 219, 388, 356, 245, | 803 | 522, 257, 216, 266, 257, 487, 257, 257, 258, 257, |
800 | 372, 370, 393, 175, 398, 159, 159, 159, 407, 159, | 804 | 166, 257, 257, 812, 257, 257, 294, 257, 257, 258, |
801 | 205, 371, 159, 373, 399, 357, 386, 375, 408, 374, | 805 | 405, 257, 168, 258, 258, 257, 257, 166, 257, 257, |
802 | 384, 367, 376, 413, 219, 219, 387, 410, 377, 219, | 806 | 166, 257, 257, 258, 257, 166, 168, 257, 258, 166, |
803 | 219, 227, 422, 414, 227, 175, 340, 227, 227, 227, | 807 | 257, 166, 365, 258, 388, 257, 257, 258, 257, 257, |
804 | 808 | ||
805 | 366, 367, 423, 299, 421, 244, 349, 244, 244, 244, | 809 | 366, 257, 257, 168, 384, 166, 168, 258, 258, 166, |
806 | 244, 244, 244, 244, 429, 435, 367, 411, 244, 175, | 810 | 394, 168, 184, 385, 368, 168, 258, 168, 313, 184, |
807 | 227, 244, 244, 424, 425, 244, 244, 244, 244, 244, | 811 | 395, 387, 184, 386, 369, 391, 184, 258, 258, 805, |
808 | 244, 436, 244, 244, 430, 219, 426, 245, 245, 245, | 812 | 389, 168, 370, 184, 728, 168, 371, 399, 382, 390, |
809 | 244, 432, 244, 244, 431, 244, 244, 245, 244, 157, | 813 | 407, 403, 483, 413, 372, 401, 216, 216, 216, 216, |
810 | 434, 341, 443, 471, 245, 157, 157, 157, 245, 245, | 814 | 408, 216, 184, 414, 428, 402, 392, 812, 812, 812, |
811 | 175, 350, 444, 437, 157, 157, 157, 157, 205, 175, | 815 | 812, 230, 812, 230, 429, 421, 230, 230, 230, 238, |
812 | 452, 439, 245, 438, 245, 159, 157, 175, 175, 440, | 816 | 230, 238, 812, 314, 812, 355, 238, 812, 812, 812, |
813 | 467, 159, 159, 159, 205, 453, 454, 472, 384, 367, | 817 | 436, 812, 238, 422, 238, 425, 238, 424, 442, 443, |
814 | 159, 159, 159, 159, 441, 205, 205, 468, 469, 205, | 818 | 458, 257, 444, 423, 257, 364, 426, 257, 257, 437, |
815 | 819 | ||
816 | 219, 455, 159, 175, 460, 219, 219, 219, 456, 219, | 820 | 459, 257, 440, 184, 450, 382, 439, 257, 238, 438, |
817 | 458, 219, 457, 227, 488, 490, 227, 459, 427, 428, | 821 | 257, 445, 257, 257, 482, 257, 257, 441, 257, 257, |
818 | 227, 501, 227, 227, 227, 489, 435, 367, 244, 244, | 822 | 523, 446, 448, 258, 804, 447, 257, 258, 257, 257, |
819 | 175, 244, 244, 175, 244, 502, 492, 503, 507, 669, | 823 | 356, 257, 257, 166, 257, 257, 258, 451, 257, 381, |
820 | 491, 175, 244, 542, 157, 244, 506, 205, 244, 713, | 824 | 382, 257, 166, 257, 258, 258, 257, 166, 184, 257, |
821 | 508, 157, 175, 504, 509, 505, 244, 157, 245, 244, | 825 | 365, 184, 166, 452, 467, 166, 526, 166, 258, 168, |
822 | 245, 244, 244, 514, 244, 512, 244, 244, 513, 244, | 826 | 258, 166, 166, 453, 166, 399, 382, 258, 168, 442, |
823 | 159, 511, 244, 510, 245, 244, 157, 159, 244, 157, | 827 | 443, 484, 454, 168, 455, 258, 802, 468, 168, 800, |
824 | 527, 244, 157, 159, 157, 157, 157, 544, 245, 175, | 828 | 184, 168, 469, 168, 238, 485, 470, 168, 168, 216, |
825 | 205, 515, 562, 245, 157, 175, 529, 175, 245, 175, | 829 | 168, 216, 238, 184, 238, 456, 216, 216, 216, 471, |
826 | 830 | ||
827 | 205, 205, 159, 219, 205, 159, 219, 245, 159, 219, | 831 | 812, 475, 812, 474, 472, 473, 216, 812, 812, 812, |
828 | 159, 159, 159, 516, 219, 517, 528, 518, 532, 543, | 832 | 216, 230, 502, 230, 230, 238, 166, 812, 230, 230, |
829 | 159, 533, 545, 531, 546, 530, 534, 560, 219, 547, | 833 | 230, 812, 812, 558, 812, 812, 503, 504, 230, 812, |
830 | 561, 219, 572, 227, 227, 227, 227, 564, 535, 227, | 834 | 812, 812, 664, 527, 516, 525, 166, 450, 382, 812, |
831 | 227, 157, 175, 573, 175, 565, 205, 575, 175, 244, | 835 | 257, 796, 168, 257, 517, 505, 794, 507, 518, 524, |
832 | 244, 574, 244, 244, 788, 244, 244, 766, 244, 157, | 836 | 506, 257, 257, 257, 257, 257, 257, 257, 257, 257, |
833 | 578, 244, 675, 610, 244, 576, 244, 159, 244, 244, | 837 | 184, 238, 168, 166, 520, 521, 519, 257, 257, 258, |
834 | 597, 244, 244, 581, 244, 577, 157, 584, 579, 157, | 838 | 257, 257, 257, 257, 257, 257, 543, 528, 257, 166, |
835 | 582, 245, 245, 244, 580, 159, 244, 157, 583, 244, | 839 | 166, 166, 166, 258, 258, 258, 542, 529, 530, 168, |
836 | 245, 157, 598, 157, 157, 585, 157, 175, 245, 175, | 840 | 166, 184, 166, 793, 166, 559, 184, 184, 184, 258, |
837 | 841 | ||
838 | 245, 175, 159, 205, 587, 159, 175, 175, 586, 205, | 842 | 258, 184, 216, 684, 258, 168, 168, 168, 168, 557, |
839 | 588, 205, 205, 159, 599, 245, 205, 159, 205, 159, | 843 | 595, 238, 216, 812, 533, 547, 168, 532, 168, 531, |
840 | 159, 613, 159, 219, 611, 601, 219, 612, 600, 219, | 844 | 168, 560, 546, 812, 544, 562, 545, 548, 561, 216, |
841 | 603, 615, 589, 219, 219, 219, 629, 227, 628, 602, | 845 | 216, 216, 549, 216, 216, 575, 230, 230, 550, 230, |
842 | 227, 227, 614, 227, 227, 157, 631, 227, 244, 630, | 846 | 812, 812, 812, 230, 812, 812, 230, 812, 812, 238, |
843 | 157, 244, 633, 205, 244, 640, 641, 244, 244, 205, | 847 | 812, 230, 230, 238, 812, 594, 238, 812, 238, 184, |
844 | 244, 244, 632, 244, 244, 157, 664, 642, 643, 645, | 848 | 587, 166, 812, 812, 578, 166, 184, 166, 184, 576, |
845 | 646, 159, 244, 175, 227, 244, 159, 647, 244, 644, | 849 | 579, 257, 748, 791, 257, 577, 593, 257, 580, 588, |
846 | 245, 649, 652, 648, 665, 651, 157, 157, 157, 245, | 850 | 706, 238, 626, 591, 590, 166, 257, 168, 589, 257, |
847 | 245, 159, 157, 244, 650, 653, 244, 244, 676, 244, | 851 | 596, 168, 257, 168, 612, 257, 592, 597, 257, 599, |
848 | 852 | ||
849 | 244, 654, 670, 244, 245, 219, 219, 227, 175, 796, | 853 | 613, 257, 257, 258, 257, 257, 598, 257, 257, 257, |
850 | 175, 655, 159, 159, 159, 205, 244, 682, 159, 244, | 854 | 257, 168, 257, 166, 184, 257, 166, 166, 258, 216, |
851 | 244, 679, 244, 244, 691, 245, 244, 681, 244, 245, | 855 | 184, 166, 166, 614, 184, 184, 216, 258, 789, 741, |
852 | 157, 244, 666, 157, 244, 244, 657, 683, 244, 157, | 856 | 812, 600, 238, 625, 258, 238, 258, 812, 238, 168, |
853 | 244, 244, 175, 244, 656, 680, 244, 244, 245, 698, | 857 | 602, 258, 168, 168, 628, 601, 603, 168, 168, 630, |
854 | 244, 205, 245, 244, 687, 219, 159, 219, 227, 159, | 858 | 616, 216, 627, 216, 615, 643, 618, 645, 604, 216, |
855 | 245, 227, 157, 205, 684, 159, 692, 245, 244, 157, | 859 | 216, 230, 812, 617, 812, 230, 230, 230, 230, 230, |
856 | 175, 244, 245, 688, 244, 697, 205, 244, 219, 245, | 860 | 812, 812, 812, 238, 663, 662, 812, 812, 812, 812, |
857 | 244, 701, 219, 244, 227, 227, 703, 709, 159, 702, | 861 | 812, 238, 238, 257, 644, 665, 257, 646, 184, 257, |
858 | 227, 175, 157, 227, 719, 159, 723, 705, 755, 704, | 862 | 655, 785, 166, 257, 648, 770, 257, 184, 656, 257, |
859 | 863 | ||
860 | 245, 157, 244, 739, 714, 244, 710, 720, 244, 245, | 864 | 754, 658, 166, 660, 657, 647, 661, 257, 679, 803, |
861 | 205, 244, 725, 792, 244, 731, 706, 244, 159, 175, | 865 | 257, 166, 166, 257, 659, 258, 166, 667, 168, 666, |
862 | 750, 219, 157, 733, 736, 727, 724, 159, 205, 175, | 866 | 257, 257, 166, 257, 257, 258, 257, 257, 168, 257, |
863 | 244, 219, 726, 244, 245, 738, 244, 227, 244, 157, | 867 | 166, 668, 257, 184, 216, 257, 216, 168, 168, 258, |
864 | 205, 244, 744, 245, 244, 742, 219, 244, 159, 740, | 868 | 216, 680, 168, 216, 216, 812, 216, 812, 168, 238, |
865 | 244, 747, 157, 244, 749, 205, 753, 758, 761, 227, | 869 | 669, 812, 258, 258, 812, 812, 168, 812, 681, 670, |
866 | 728, 244, 245, 760, 244, 159, 219, 244, 157, 175, | 870 | 690, 258, 685, 230, 230, 230, 230, 230, 672, 230, |
867 | 245, 764, 205, 219, 769, 751, 227, 777, 159, 245, | 871 | 238, 783, 671, 691, 812, 812, 812, 812, 812, 694, |
868 | 157, 244, 772, 762, 244, 771, 775, 244, 205, 244, | 872 | 812, 257, 257, 257, 257, 257, 257, 257, 257, 257, |
869 | 780, 782, 244, 245, 159, 244, 219, 227, 783, 157, | 873 | 696, 257, 697, 257, 257, 257, 257, 257, 257, 257, |
870 | 874 | ||
871 | 790, 244, 786, 789, 244, 773, 159, 244, 244, 787, | 875 | 184, 257, 698, 695, 166, 166, 166, 216, 230, 216, |
872 | 791, 244, 784, 245, 244, 785, 781, 779, 793, 778, | 876 | 230, 238, 238, 258, 258, 258, 238, 166, 812, 812, |
873 | 776, 245, 774, 794, 770, 159, 768, 767, 795, 765, | 877 | 812, 812, 184, 258, 707, 258, 699, 258, 702, 782, |
874 | 763, 759, 757, 245, 756, 754, 752, 748, 746, 745, | 878 | 168, 168, 168, 712, 716, 724, 166, 238, 740, 703, |
875 | 245, 49, 49, 49, 49, 49, 49, 49, 49, 49, | 879 | 718, 713, 717, 168, 257, 257, 216, 257, 257, 719, |
876 | 49, 49, 49, 64, 64, 64, 64, 64, 64, 64, | 880 | 257, 257, 216, 166, 230, 230, 729, 812, 216, 166, |
877 | 64, 64, 64, 64, 64, 107, 107, 107, 107, 107, | 881 | 787, 184, 168, 812, 734, 812, 812, 746, 257, 812, |
878 | 107, 107, 107, 107, 107, 107, 107, 122, 122, 122, | 882 | 781, 257, 738, 720, 257, 257, 258, 258, 257, 168, |
879 | 122, 122, 122, 122, 122, 122, 122, 122, 122, 148, | 883 | 725, 257, 230, 216, 721, 168, 257, 230, 166, 257, |
880 | 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, | 884 | 238, 742, 257, 812, 812, 184, 735, 751, 812, 739, |
881 | 885 | ||
882 | 148, 158, 158, 158, 743, 158, 158, 158, 168, 168, | 886 | 258, 753, 216, 257, 230, 755, 257, 258, 759, 257, |
883 | 741, 168, 168, 174, 227, 174, 174, 174, 174, 174, | 887 | 780, 757, 166, 812, 168, 812, 257, 765, 258, 257, |
884 | 174, 174, 174, 174, 174, 178, 178, 178, 178, 178, | 888 | 216, 238, 257, 230, 743, 762, 778, 764, 166, 768, |
885 | 178, 178, 178, 178, 178, 178, 178, 190, 190, 190, | 889 | 257, 812, 216, 257, 812, 258, 257, 773, 168, 230, |
886 | 190, 190, 190, 190, 190, 190, 190, 190, 190, 198, | 890 | 775, 184, 776, 812, 766, 166, 216, 779, 258, 792, |
887 | 198, 219, 198, 198, 206, 206, 737, 206, 206, 206, | 891 | 812, 784, 777, 257, 168, 230, 257, 812, 786, 257, |
888 | 212, 212, 205, 212, 212, 220, 220, 735, 220, 220, | 892 | 238, 166, 258, 790, 795, 238, 812, 216, 230, 257, |
889 | 220, 226, 226, 226, 226, 226, 226, 226, 226, 226, | 893 | 216, 168, 257, 797, 166, 257, 774, 788, 812, 812, |
890 | 226, 226, 226, 228, 228, 228, 228, 228, 228, 228, | 894 | 772, 812, 798, 801, 230, 258, 771, 168, 769, 806, |
891 | 228, 228, 228, 228, 228, 243, 734, 243, 243, 243, | 895 | 808, 809, 799, 257, 767, 812, 257, 763, 761, 257, |
892 | 896 | ||
893 | 243, 243, 243, 243, 243, 243, 243, 248, 175, 732, | 897 | 168, 258, 257, 760, 758, 257, 756, 238, 257, 752, |
894 | 248, 248, 248, 248, 248, 248, 248, 248, 248, 251, | 898 | 750, 749, 184, 747, 745, 744, 737, 736, 733, 732, |
895 | 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, | 899 | 810, 731, 730, 727, 726, 258, 723, 722, 715, 714, |
896 | 251, 254, 730, 729, 254, 254, 254, 254, 254, 254, | 900 | 711, 710, 709, 708, 258, 50, 50, 50, 50, 50, |
897 | 254, 254, 254, 269, 269, 722, 269, 269, 277, 277, | 901 | 50, 50, 50, 50, 50, 50, 50, 66, 66, 66, |
898 | 277, 721, 277, 277, 277, 281, 281, 718, 281, 403, | 902 | 66, 66, 66, 66, 66, 66, 66, 66, 66, 112, |
899 | 403, 717, 403, 403, 716, 715, 403, 418, 418, 712, | 903 | 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, |
900 | 418, 418, 711, 708, 418, 450, 450, 707, 450, 450, | 904 | 112, 128, 128, 128, 128, 128, 128, 128, 128, 128, |
901 | 700, 699, 450, 485, 485, 696, 485, 485, 695, 694, | 905 | 128, 128, 128, 155, 155, 155, 155, 155, 155, 155, |
902 | 485, 499, 499, 693, 499, 499, 690, 689, 499, 686, | 906 | 155, 155, 155, 155, 155, 167, 167, 167, 705, 167, |
903 | 907 | ||
904 | 685, 227, 227, 227, 227, 219, 219, 219, 219, 678, | 908 | 167, 167, 177, 177, 704, 177, 177, 183, 701, 183, |
905 | 677, 205, 205, 205, 205, 674, 673, 672, 671, 175, | 909 | 183, 183, 183, 183, 183, 183, 183, 183, 183, 187, |
906 | 175, 175, 175, 668, 667, 663, 662, 661, 660, 659, | 910 | 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, |
907 | 658, 639, 638, 637, 636, 635, 634, 627, 626, 625, | 911 | 187, 201, 201, 201, 201, 201, 201, 201, 201, 201, |
908 | 624, 623, 622, 621, 620, 619, 618, 617, 616, 609, | 912 | 201, 201, 201, 209, 209, 700, 209, 209, 217, 217, |
909 | 608, 607, 606, 605, 604, 596, 595, 594, 593, 592, | 913 | 238, 217, 217, 217, 223, 223, 238, 223, 223, 231, |
910 | 591, 590, 219, 500, 571, 570, 569, 568, 567, 566, | 914 | 231, 238, 231, 231, 231, 237, 237, 237, 237, 237, |
911 | 205, 486, 559, 558, 557, 556, 555, 554, 553, 552, | 915 | 237, 237, 237, 237, 237, 237, 237, 239, 239, 239, |
912 | 551, 550, 549, 548, 541, 540, 539, 538, 537, 536, | 916 | 239, 239, 239, 239, 239, 239, 239, 239, 239, 256, |
913 | 451, 526, 525, 524, 523, 522, 521, 520, 519, 428, | 917 | 238, 256, 256, 256, 256, 256, 256, 256, 256, 256, |
914 | 918 | ||
915 | 500, 219, 419, 498, 497, 496, 495, 494, 493, 486, | 919 | 256, 261, 693, 692, 261, 261, 261, 261, 261, 261, |
916 | 205, 404, 484, 483, 482, 481, 480, 479, 478, 477, | 920 | 261, 261, 261, 264, 264, 264, 264, 264, 264, 264, |
917 | 476, 475, 474, 473, 466, 465, 464, 463, 462, 461, | 921 | 264, 264, 264, 264, 264, 267, 689, 688, 267, 267, |
918 | 451, 367, 449, 448, 447, 446, 445, 442, 352, 227, | 922 | 267, 267, 267, 267, 267, 267, 267, 284, 284, 687, |
919 | 219, 419, 417, 416, 415, 412, 205, 404, 402, 401, | 923 | 284, 284, 292, 292, 292, 686, 292, 292, 292, 296, |
920 | 400, 397, 396, 395, 394, 391, 175, 383, 382, 381, | 924 | 296, 184, 296, 418, 418, 184, 418, 418, 184, 184, |
921 | 378, 282, 365, 362, 361, 360, 359, 358, 352, 247, | 925 | 418, 433, 433, 683, 433, 433, 682, 678, 433, 465, |
922 | 242, 227, 227, 227, 227, 227, 229, 227, 227, 219, | 926 | 465, 677, 465, 465, 676, 675, 465, 500, 500, 674, |
923 | 333, 331, 328, 327, 326, 205, 319, 317, 314, 313, | 927 | 500, 500, 673, 654, 500, 514, 514, 653, 514, 514, |
924 | 312, 311, 308, 307, 306, 192, 175, 175, 175, 149, | 928 | 652, 651, 514, 650, 649, 642, 641, 640, 639, 638, |
925 | 929 | ||
926 | 175, 297, 294, 293, 292, 282, 280, 149, 276, 275, | 930 | 637, 636, 635, 634, 633, 632, 631, 624, 623, 622, |
927 | 274, 273, 270, 247, 229, 227, 227, 227, 219, 218, | 931 | 621, 620, 619, 611, 610, 609, 608, 607, 606, 605, |
928 | 217, 216, 215, 214, 213, 205, 204, 203, 202, 201, | 932 | 515, 586, 585, 584, 583, 582, 581, 501, 574, 573, |
929 | 200, 199, 197, 196, 195, 194, 193, 156, 155, 154, | 933 | 572, 571, 570, 569, 568, 567, 566, 565, 564, 563, |
930 | 153, 149, 154, 175, 175, 173, 172, 171, 170, 169, | 934 | 556, 555, 554, 553, 552, 551, 466, 541, 540, 539, |
931 | 156, 155, 154, 153, 149, 797, 23, 797, 797, 797, | 935 | 538, 537, 536, 535, 534, 443, 515, 434, 513, 512, |
932 | 797, 797, 797, 797, 797, 797, 797, 797, 797, 797, | 936 | 511, 510, 509, 508, 501, 419, 499, 498, 497, 496, |
933 | 797, 797, 797, 797, 797, 797, 797, 797, 797, 797, | 937 | 495, 494, 493, 492, 491, 490, 489, 488, 481, 480, |
934 | 797, 797, 797, 797, 797, 797, 797, 797, 797, 797, | 938 | 479, 478, 477, 476, 466, 382, 464, 463, 462, 461, |
935 | 797, 797, 797, 797, 797, 797, 797, 797, 797, 797, | 939 | 460, 457, 367, 238, 434, 432, 431, 430, 427, 419, |
936 | 940 | ||
937 | 797, 797, 797, 797, 797, 797, 797, 797, 797, 797, | 941 | 417, 416, 415, 412, 411, 410, 409, 406, 184, 398, |
938 | 797, 797, 797, 797, 797 | 942 | 397, 396, 393, 297, 380, 377, 376, 375, 374, 373, |
943 | 367, 260, 255, 238, 238, 238, 238, 238, 238, 238, | ||
944 | 240, 238, 238, 348, 346, 343, 342, 341, 334, 332, | ||
945 | 329, 328, 327, 326, 323, 322, 321, 203, 184, 184, | ||
946 | 184, 184, 184, 156, 184, 312, 309, 308, 307, 297, | ||
947 | 295, 156, 291, 290, 289, 288, 285, 260, 240, 238, | ||
948 | 238, 238, 229, 228, 227, 226, 225, 224, 215, 214, | ||
949 | 213, 212, 211, 210, 208, 207, 206, 205, 204, 165, | ||
950 | 162, 161, 160, 156, 162, 184, 184, 182, 181, 180, | ||
951 | |||
952 | 179, 178, 165, 162, 161, 160, 156, 812, 23, 812, | ||
953 | 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, | ||
954 | 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, | ||
955 | 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, | ||
956 | 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, | ||
957 | 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, | ||
958 | 812, 812, 812, 812, 812, 812, 812 | ||
939 | } ; | 959 | } ; |
940 | 960 | ||
941 | static yyconst flex_int16_t yy_chk[2216] = | 961 | static yyconst flex_int16_t yy_chk[2368] = |
942 | { 0, | 962 | { 0, |
943 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, | 963 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, |
944 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, | 964 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, |
@@ -953,28 +973,28 @@ static yyconst flex_int16_t yy_chk[2216] = | |||
953 | 973 | ||
954 | 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, | 974 | 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, |
955 | 3, 3, 3, 3, 3, 3, 5, 5, 5, 29, | 975 | 3, 3, 3, 3, 3, 3, 5, 5, 5, 29, |
956 | 5, 34, 36, 5, 35, 5, 37, 29, 50, 50, | 976 | 5, 33, 35, 5, 33, 5, 37, 29, 5, 54, |
957 | 38, 5, 5, 5, 62, 41, 5, 40, 57, 53, | 977 | 36, 5, 5, 5, 40, 38, 5, 39, 51, 51, |
958 | 55, 55, 59, 50, 57, 42, 39, 34, 36, 35, | 978 | 56, 56, 61, 54, 843, 42, 43, 64, 35, 125, |
959 | 35, 5, 37, 53, 5, 36, 38, 59, 5, 91, | 979 | 41, 5, 37, 51, 5, 36, 36, 61, 5, 37, |
960 | 37, 41, 60, 40, 62, 5, 6, 6, 6, 61, | 980 | 40, 38, 122, 39, 40, 5, 6, 6, 6, 38, |
961 | 6, 42, 39, 6, 63, 6, 39, 40, 38, 42, | 981 | 6, 42, 43, 6, 63, 6, 41, 64, 6, 62, |
962 | 54, 6, 6, 6, 41, 60, 6, 88, 54, 58, | 982 | 43, 6, 6, 6, 55, 39, 6, 57, 57, 65, |
963 | 58, 65, 65, 61, 69, 54, 89, 102, 63, 91, | 983 | 41, 122, 55, 125, 42, 60, 60, 59, 63, 55, |
964 | 984 | ||
965 | 90, 6, 69, 92, 6, 103, 104, 105, 6, 106, | 985 | 59, 6, 62, 59, 6, 67, 67, 75, 6, 124, |
966 | 118, 112, 88, 111, 111, 6, 7, 7, 7, 114, | 986 | 75, 71, 123, 65, 132, 6, 7, 7, 7, 71, |
967 | 7, 111, 102, 7, 113, 7, 112, 114, 116, 89, | 987 | 7, 841, 126, 7, 90, 7, 91, 92, 7, 93, |
968 | 115, 7, 7, 7, 90, 117, 7, 92, 103, 113, | 988 | 94, 7, 7, 7, 95, 90, 7, 91, 92, 105, |
969 | 104, 119, 120, 106, 143, 115, 143, 105, 118, 121, | 989 | 93, 94, 96, 132, 106, 95, 107, 124, 110, 123, |
970 | 121, 7, 123, 123, 7, 126, 122, 116, 7, 122, | 990 | 105, 7, 92, 96, 7, 106, 250, 107, 7, 110, |
971 | 172, 128, 122, 150, 172, 7, 8, 8, 8, 158, | 991 | 126, 108, 93, 187, 94, 7, 8, 8, 8, 109, |
972 | 8, 125, 117, 8, 125, 8, 160, 125, 189, 161, | 992 | 8, 107, 108, 8, 95, 8, 96, 187, 8, 111, |
973 | 120, 8, 8, 8, 126, 119, 8, 128, 122, 150, | 993 | 109, 8, 8, 8, 116, 116, 8, 117, 110, 120, |
974 | 151, 176, 176, 178, 828, 158, 160, 826, 151, 185, | 994 | 111, 118, 116, 250, 108, 119, 121, 120, 127, 127, |
975 | 995 | ||
976 | 293, 8, 160, 125, 8, 161, 176, 178, 8, 185, | 996 | 120, 8, 117, 109, 8, 150, 118, 150, 8, 839, |
977 | 293, 189, 161, 191, 191, 8, 9, 9, 9, 9, | 997 | 119, 121, 838, 111, 837, 8, 9, 9, 9, 9, |
978 | 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, | 998 | 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, |
979 | 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, | 999 | 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, |
980 | 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, | 1000 | 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, |
@@ -1000,198 +1020,214 @@ static yyconst flex_int16_t yy_chk[2216] = | |||
1000 | 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, | 1020 | 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, |
1001 | 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, | 1021 | 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, |
1002 | 15, 15, 15, 15, 15, 15, 15, 15, 17, 17, | 1022 | 15, 15, 15, 15, 15, 15, 15, 15, 17, 17, |
1003 | 17, 163, 17, 127, 127, 17, 127, 17, 824, 127, | 1023 | 17, 134, 17, 128, 157, 17, 128, 17, 818, 128, |
1004 | 152, 162, 164, 17, 17, 17, 129, 196, 17, 129, | 1024 | 17, 129, 129, 17, 17, 17, 131, 158, 17, 131, |
1005 | 187, 196, 129, 346, 129, 167, 130, 163, 131, 130, | 1025 | 133, 133, 131, 133, 167, 158, 133, 134, 185, 185, |
1006 | 186, 131, 130, 17, 131, 127, 17, 162, 164, 823, | 1026 | 157, 135, 159, 17, 135, 128, 17, 135, 181, 135, |
1007 | 17, 166, 130, 163, 131, 187, 162, 17, 129, 211, | 1027 | 17, 196, 181, 185, 249, 189, 197, 17, 131, 315, |
1008 | 1028 | ||
1009 | 164, 167, 237, 186, 17, 18, 18, 18, 130, 18, | 1029 | 167, 196, 133, 189, 17, 18, 18, 18, 315, 18, |
1010 | 131, 346, 18, 136, 18, 152, 136, 166, 167, 136, | 1030 | 189, 404, 18, 135, 18, 200, 170, 18, 249, 197, |
1011 | 18, 18, 18, 132, 188, 18, 132, 134, 133, 132, | 1031 | 18, 18, 18, 136, 139, 18, 136, 139, 137, 136, |
1012 | 134, 133, 132, 134, 133, 135, 135, 166, 135, 237, | 1032 | 139, 137, 169, 139, 137, 138, 139, 159, 138, 136, |
1013 | 18, 135, 211, 18, 133, 136, 188, 18, 165, 202, | 1033 | 18, 138, 170, 18, 137, 404, 171, 18, 200, 170, |
1014 | 188, 136, 207, 202, 18, 132, 208, 134, 209, 134, | 1034 | 198, 138, 169, 251, 18, 136, 139, 172, 169, 561, |
1015 | 133, 18, 19, 19, 19, 19, 19, 135, 19, 19, | 1035 | 137, 18, 19, 19, 19, 19, 19, 138, 19, 19, |
1016 | 137, 19, 207, 137, 165, 180, 137, 19, 19, 19, | 1036 | 140, 19, 171, 140, 19, 198, 140, 19, 19, 19, |
1017 | 165, 181, 19, 180, 165, 138, 221, 222, 138, 208, | 1037 | 809, 171, 19, 172, 175, 143, 140, 217, 143, 362, |
1018 | 180, 138, 139, 209, 19, 139, 181, 19, 139, 216, | 1038 | 141, 143, 251, 141, 19, 561, 141, 19, 217, 172, |
1019 | 1039 | ||
1020 | 19, 210, 137, 216, 19, 223, 221, 224, 225, 137, | 1040 | 19, 319, 140, 144, 19, 173, 144, 267, 176, 144, |
1021 | 238, 19, 20, 20, 20, 20, 20, 138, 20, 20, | 1041 | 175, 19, 20, 20, 20, 20, 20, 143, 20, 20, |
1022 | 222, 20, 236, 305, 139, 241, 241, 20, 20, 20, | 1042 | 141, 20, 141, 143, 20, 319, 199, 20, 20, 20, |
1023 | 138, 139, 20, 210, 230, 230, 181, 210, 822, 224, | 1043 | 175, 173, 20, 267, 176, 144, 202, 202, 254, 254, |
1024 | 223, 275, 230, 224, 20, 275, 236, 20, 300, 238, | 1044 | 362, 207, 144, 173, 20, 207, 231, 20, 199, 213, |
1025 | 20, 225, 246, 246, 20, 279, 279, 300, 341, 341, | 1045 | 20, 176, 199, 213, 20, 227, 290, 231, 803, 227, |
1026 | 305, 20, 21, 21, 21, 21, 21, 21, 21, 21, | 1046 | 290, 20, 21, 21, 21, 21, 21, 21, 21, 21, |
1027 | 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, | 1047 | 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, |
1028 | 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, | 1048 | 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, |
1029 | 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, | 1049 | 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, |
1030 | 1050 | ||
1031 | 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, | 1051 | 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, |
1032 | 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, | 1052 | 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, |
1033 | 231, 231, 239, 240, 243, 244, 248, 243, 244, 388, | 1053 | 142, 142, 145, 142, 146, 145, 142, 146, 145, 174, |
1034 | 243, 244, 245, 245, 249, 245, 490, 250, 245, 250, | 1054 | 146, 190, 221, 218, 222, 253, 219, 220, 232, 234, |
1035 | 251, 251, 278, 251, 252, 252, 251, 252, 253, 253, | 1055 | 233, 242, 242, 221, 218, 222, 190, 219, 220, 232, |
1036 | 252, 253, 254, 255, 253, 248, 243, 244, 239, 304, | 1056 | 234, 233, 142, 218, 145, 174, 146, 252, 232, 235, |
1037 | 256, 323, 239, 249, 245, 256, 388, 320, 250, 490, | 1057 | 236, 174, 800, 146, 221, 174, 268, 145, 221, 219, |
1038 | 240, 258, 251, 406, 258, 231, 252, 258, 254, 255, | 1058 | 235, 236, 220, 233, 234, 241, 241, 222, 256, 259, |
1039 | 253, 257, 259, 304, 257, 259, 320, 257, 259, 257, | 1059 | 259, 256, 253, 241, 256, 261, 190, 262, 263, 292, |
1040 | 260, 256, 261, 260, 406, 261, 260, 278, 261, 262, | 1060 | 263, 235, 268, 252, 796, 235, 242, 252, 257, 258, |
1041 | 1061 | ||
1042 | 323, 803, 262, 258, 263, 262, 265, 263, 277, 265, | 1062 | 258, 257, 258, 236, 257, 258, 264, 264, 269, 264, |
1043 | 263, 285, 265, 257, 259, 266, 283, 267, 266, 286, | 1063 | 256, 293, 264, 269, 261, 292, 262, 265, 265, 263, |
1044 | 267, 266, 260, 267, 261, 284, 258, 268, 303, 263, | 1064 | 265, 266, 266, 265, 266, 444, 270, 266, 405, 270, |
1045 | 268, 262, 321, 268, 277, 283, 263, 285, 265, 287, | 1065 | 257, 258, 270, 320, 270, 294, 294, 271, 264, 269, |
1046 | 288, 291, 283, 289, 265, 286, 290, 266, 298, 267, | 1066 | 271, 272, 273, 271, 272, 273, 300, 272, 273, 265, |
1047 | 301, 284, 307, 324, 267, 266, 335, 303, 267, 268, | 1067 | 444, 274, 337, 266, 274, 405, 275, 274, 270, 275, |
1048 | 286, 284, 307, 298, 313, 287, 288, 291, 321, 289, | 1068 | 302, 276, 275, 337, 276, 277, 293, 276, 277, 271, |
1049 | 325, 284, 290, 287, 313, 268, 301, 289, 321, 288, | 1069 | 320, 277, 300, 272, 273, 278, 280, 299, 278, 280, |
1050 | 299, 299, 290, 327, 337, 334, 301, 324, 291, 339, | 1070 | 301, 278, 280, 274, 281, 298, 302, 281, 275, 305, |
1051 | 338, 342, 335, 327, 343, 299, 340, 340, 345, 347, | 1071 | 281, 303, 271, 276, 302, 282, 283, 277, 282, 283, |
1052 | 1072 | ||
1053 | 366, 366, 335, 298, 334, 348, 349, 351, 348, 349, | 1073 | 278, 282, 283, 299, 298, 304, 301, 278, 280, 306, |
1054 | 351, 348, 349, 351, 342, 350, 350, 325, 350, 389, | 1074 | 308, 298, 318, 299, 280, 305, 281, 303, 313, 316, |
1055 | 794, 350, 353, 337, 338, 353, 354, 355, 353, 354, | 1075 | 308, 301, 401, 299, 281, 305, 706, 282, 283, 794, |
1056 | 355, 351, 354, 355, 343, 793, 339, 348, 349, 351, | 1076 | 303, 304, 282, 313, 706, 306, 282, 314, 314, 304, |
1057 | 356, 345, 357, 356, 343, 357, 356, 350, 357, 369, | 1077 | 322, 318, 401, 328, 283, 316, 335, 336, 338, 340, |
1058 | 347, 340, 359, 389, 353, 370, 371, 372, 354, 355, | 1078 | 322, 339, 314, 328, 342, 316, 306, 335, 336, 338, |
1059 | 390, 349, 359, 353, 373, 374, 375, 377, 409, 385, | 1079 | 340, 349, 339, 350, 342, 335, 351, 352, 353, 357, |
1060 | 369, 355, 356, 353, 357, 369, 376, 386, 387, 356, | 1080 | 354, 358, 349, 313, 350, 355, 355, 351, 352, 353, |
1061 | 385, 370, 371, 372, 407, 370, 371, 390, 384, 384, | 1081 | 349, 354, 360, 336, 361, 339, 445, 338, 356, 356, |
1062 | 373, 374, 375, 377, 357, 408, 410, 386, 387, 411, | 1082 | 374, 363, 357, 336, 363, 364, 340, 363, 364, 350, |
1063 | 1083 | ||
1064 | 421, 372, 376, 384, 377, 422, 424, 423, 373, 426, | 1084 | 374, 364, 353, 400, 365, 365, 352, 365, 448, 350, |
1065 | 375, 425, 374, 429, 407, 409, 430, 376, 427, 427, | 1085 | 365, 358, 368, 366, 400, 368, 366, 354, 368, 366, |
1066 | 431, 421, 432, 433, 434, 408, 435, 435, 437, 435, | 1086 | 445, 358, 361, 363, 793, 360, 369, 364, 370, 369, |
1067 | 467, 437, 435, 610, 437, 422, 411, 423, 429, 610, | 1087 | 355, 370, 369, 384, 370, 371, 365, 366, 371, 381, |
1068 | 410, 691, 436, 467, 451, 436, 426, 489, 436, 691, | 1088 | 381, 371, 387, 372, 368, 366, 372, 385, 403, 372, |
1069 | 430, 454, 469, 424, 431, 425, 438, 452, 435, 438, | 1089 | 364, 402, 386, 368, 384, 388, 448, 389, 369, 384, |
1070 | 437, 439, 438, 437, 439, 434, 440, 439, 436, 440, | 1090 | 370, 390, 391, 368, 392, 399, 399, 371, 387, 442, |
1071 | 451, 433, 440, 432, 436, 441, 453, 454, 441, 455, | 1091 | 442, 402, 370, 385, 371, 372, 791, 385, 386, 789, |
1072 | 452, 441, 456, 452, 458, 457, 459, 469, 438, 468, | 1092 | 399, 388, 386, 389, 447, 403, 387, 390, 391, 419, |
1073 | 488, 438, 489, 439, 460, 472, 454, 471, 440, 470, | 1093 | 392, 421, 449, 483, 596, 372, 422, 423, 424, 388, |
1074 | 1094 | ||
1075 | 491, 492, 453, 502, 487, 455, 503, 441, 456, 501, | 1095 | 419, 392, 421, 391, 389, 390, 425, 422, 423, 424, |
1076 | 458, 457, 459, 439, 504, 440, 453, 441, 457, 468, | 1096 | 426, 434, 421, 436, 437, 446, 466, 425, 438, 439, |
1077 | 460, 458, 470, 456, 471, 455, 459, 487, 505, 472, | 1097 | 440, 426, 434, 483, 436, 437, 422, 423, 441, 438, |
1078 | 488, 506, 501, 507, 508, 509, 510, 491, 460, 511, | 1098 | 439, 440, 596, 449, 436, 447, 468, 450, 450, 441, |
1079 | 512, 527, 777, 502, 542, 492, 628, 504, 755, 513, | 1099 | 450, 785, 466, 450, 437, 424, 783, 426, 438, 446, |
1080 | 514, 503, 513, 514, 777, 513, 514, 755, 515, 528, | 1100 | 425, 451, 452, 453, 451, 452, 453, 451, 452, 453, |
1081 | 507, 515, 628, 542, 515, 505, 516, 527, 517, 516, | 1101 | 484, 524, 468, 467, 440, 441, 439, 454, 455, 450, |
1082 | 527, 517, 516, 510, 517, 506, 529, 513, 508, 530, | 1102 | 454, 455, 456, 454, 455, 456, 468, 451, 456, 469, |
1083 | 511, 513, 514, 518, 509, 528, 518, 531, 512, 518, | 1103 | 470, 471, 472, 451, 452, 453, 467, 452, 453, 467, |
1084 | 515, 532, 528, 533, 534, 514, 535, 545, 516, 544, | 1104 | 473, 487, 474, 782, 475, 484, 482, 625, 485, 454, |
1085 | 1105 | ||
1086 | 517, 543, 529, 561, 516, 530, 546, 547, 515, 560, | 1106 | 455, 486, 501, 625, 456, 469, 470, 471, 472, 482, |
1087 | 517, 562, 563, 531, 529, 518, 564, 532, 565, 533, | 1107 | 524, 523, 502, 501, 456, 472, 473, 455, 474, 454, |
1088 | 534, 545, 535, 573, 543, 532, 572, 544, 531, 574, | 1108 | 475, 485, 471, 502, 469, 487, 470, 473, 486, 503, |
1089 | 535, 547, 518, 576, 575, 577, 561, 578, 560, 533, | 1109 | 504, 505, 474, 506, 507, 502, 515, 516, 475, 517, |
1090 | 579, 580, 546, 581, 582, 598, 563, 583, 584, 562, | 1110 | 503, 504, 505, 518, 506, 507, 520, 515, 516, 522, |
1091 | 597, 584, 565, 791, 584, 572, 573, 585, 586, 629, | 1111 | 517, 519, 521, 525, 518, 523, 526, 520, 527, 558, |
1092 | 585, 586, 564, 585, 586, 599, 597, 574, 575, 577, | 1112 | 516, 545, 519, 521, 505, 542, 684, 543, 728, 503, |
1093 | 578, 598, 587, 611, 647, 587, 597, 579, 587, 576, | 1113 | 506, 528, 728, 780, 528, 504, 522, 528, 507, 517, |
1094 | 584, 581, 584, 580, 598, 583, 600, 601, 602, 585, | 1114 | 684, 719, 558, 520, 519, 544, 529, 545, 518, 529, |
1095 | 586, 599, 603, 588, 582, 585, 588, 589, 629, 588, | 1115 | 525, 542, 529, 543, 542, 530, 521, 526, 530, 528, |
1096 | 1116 | ||
1097 | 589, 586, 611, 589, 587, 640, 641, 646, 788, 785, | 1117 | 543, 530, 531, 528, 532, 531, 527, 532, 531, 533, |
1098 | 669, 587, 600, 601, 602, 676, 652, 647, 603, 652, | 1118 | 532, 544, 533, 546, 557, 533, 547, 548, 529, 577, |
1099 | 653, 640, 652, 653, 669, 588, 653, 646, 654, 589, | 1119 | 560, 549, 550, 544, 559, 562, 575, 530, 778, 719, |
1100 | 664, 654, 600, 666, 654, 655, 589, 652, 655, 665, | 1120 | 577, 529, 595, 557, 531, 597, 532, 575, 594, 546, |
1101 | 656, 655, 670, 656, 588, 641, 656, 657, 652, 676, | 1121 | 531, 533, 547, 548, 560, 530, 532, 549, 550, 562, |
1102 | 657, 675, 653, 657, 664, 680, 664, 679, 681, 666, | 1122 | 547, 576, 559, 578, 546, 575, 550, 577, 533, 579, |
1103 | 654, 682, 688, 698, 653, 665, 670, 655, 683, 687, | 1123 | 580, 587, 576, 548, 578, 588, 589, 590, 591, 592, |
1104 | 692, 683, 656, 665, 683, 675, 697, 684, 701, 657, | 1124 | 579, 580, 587, 593, 595, 594, 588, 589, 590, 591, |
1105 | 684, 679, 702, 684, 704, 725, 681, 687, 688, 680, | 1125 | 592, 598, 740, 599, 576, 597, 599, 578, 759, 599, |
1106 | 703, 744, 710, 739, 697, 687, 701, 683, 744, 682, | 1126 | 587, 774, 612, 600, 580, 759, 600, 792, 588, 600, |
1107 | 1127 | ||
1108 | 683, 709, 705, 725, 692, 705, 688, 698, 705, 684, | 1128 | 740, 590, 613, 592, 589, 579, 593, 601, 612, 792, |
1109 | 719, 706, 703, 781, 706, 709, 684, 706, 710, 713, | 1129 | 601, 614, 615, 601, 591, 599, 616, 599, 612, 598, |
1110 | 739, 723, 731, 713, 719, 705, 702, 709, 736, 733, | 1130 | 602, 603, 617, 602, 603, 600, 602, 603, 613, 604, |
1111 | 727, 738, 704, 727, 705, 723, 727, 750, 728, 742, | 1131 | 618, 600, 604, 626, 644, 604, 645, 614, 615, 601, |
1112 | 747, 728, 733, 706, 728, 731, 749, 740, 731, 727, | 1132 | 646, 613, 616, 647, 643, 644, 648, 645, 617, 662, |
1113 | 740, 736, 753, 740, 738, 758, 742, 747, 750, 761, | 1133 | 601, 646, 602, 603, 647, 643, 618, 648, 615, 602, |
1114 | 706, 751, 727, 749, 751, 742, 760, 751, 764, 766, | 1134 | 643, 604, 626, 655, 656, 657, 658, 659, 604, 660, |
1115 | 728, 753, 769, 771, 758, 740, 772, 766, 753, 740, | 1135 | 661, 772, 603, 644, 655, 656, 657, 658, 659, 655, |
1116 | 775, 762, 761, 751, 762, 760, 764, 762, 780, 773, | 1136 | 660, 667, 668, 669, 667, 668, 669, 667, 668, 669, |
1117 | 769, 771, 773, 751, 764, 773, 782, 783, 772, 786, | 1137 | 661, 670, 662, 671, 670, 672, 671, 670, 672, 671, |
1118 | 1138 | ||
1119 | 779, 784, 775, 778, 784, 762, 775, 784, 795, 776, | 1139 | 685, 672, 667, 656, 679, 680, 681, 691, 695, 690, |
1120 | 780, 795, 773, 762, 795, 774, 770, 768, 782, 767, | 1140 | 694, 697, 696, 667, 668, 669, 718, 702, 691, 695, |
1121 | 765, 773, 763, 783, 759, 786, 757, 756, 784, 754, | 1141 | 690, 694, 707, 670, 685, 671, 668, 672, 679, 771, |
1122 | 752, 748, 746, 784, 745, 743, 741, 737, 735, 734, | 1142 | 679, 680, 681, 690, 694, 702, 703, 776, 718, 680, |
1123 | 795, 798, 798, 798, 798, 798, 798, 798, 798, 798, | 1143 | 696, 691, 695, 702, 698, 699, 712, 698, 699, 697, |
1124 | 798, 798, 798, 799, 799, 799, 799, 799, 799, 799, | 1144 | 698, 699, 713, 724, 716, 717, 707, 712, 735, 725, |
1125 | 799, 799, 799, 799, 799, 800, 800, 800, 800, 800, | 1145 | 776, 770, 703, 713, 712, 716, 717, 724, 720, 735, |
1126 | 800, 800, 800, 800, 800, 800, 800, 801, 801, 801, | 1146 | 770, 720, 716, 698, 720, 721, 698, 699, 721, 724, |
1127 | 801, 801, 801, 801, 801, 801, 801, 801, 801, 802, | 1147 | 703, 721, 739, 734, 699, 725, 742, 738, 746, 742, |
1128 | 802, 802, 802, 802, 802, 802, 802, 802, 802, 802, | 1148 | 754, 720, 742, 739, 734, 748, 713, 734, 738, 717, |
1129 | 1149 | ||
1130 | 802, 804, 804, 804, 732, 804, 804, 804, 805, 805, | 1150 | 720, 738, 751, 743, 753, 742, 743, 721, 748, 743, |
1131 | 729, 805, 805, 806, 726, 806, 806, 806, 806, 806, | 1151 | 769, 746, 757, 751, 746, 753, 755, 754, 742, 755, |
1132 | 806, 806, 806, 806, 806, 807, 807, 807, 807, 807, | 1152 | 762, 765, 755, 764, 721, 751, 767, 753, 768, 757, |
1133 | 807, 807, 807, 807, 807, 807, 807, 808, 808, 808, | 1153 | 766, 762, 773, 766, 764, 743, 766, 762, 757, 775, |
1134 | 808, 808, 808, 808, 808, 808, 808, 808, 808, 809, | 1154 | 764, 781, 765, 773, 755, 779, 784, 768, 755, 781, |
1135 | 809, 724, 809, 809, 810, 810, 721, 810, 810, 810, | 1155 | 775, 773, 766, 777, 768, 786, 777, 784, 775, 777, |
1136 | 811, 811, 720, 811, 811, 812, 812, 717, 812, 812, | 1156 | 787, 790, 766, 779, 784, 798, 786, 795, 797, 788, |
1137 | 812, 813, 813, 813, 813, 813, 813, 813, 813, 813, | 1157 | 806, 779, 788, 786, 801, 788, 763, 777, 795, 797, |
1138 | 813, 813, 813, 814, 814, 814, 814, 814, 814, 814, | 1158 | 761, 806, 787, 790, 808, 777, 760, 790, 758, 795, |
1139 | 814, 814, 814, 814, 814, 815, 715, 815, 815, 815, | 1159 | 797, 798, 788, 799, 756, 808, 799, 752, 750, 799, |
1140 | 1160 | ||
1141 | 815, 815, 815, 815, 815, 815, 815, 816, 714, 711, | 1161 | 801, 788, 810, 749, 747, 810, 744, 741, 810, 736, |
1142 | 816, 816, 816, 816, 816, 816, 816, 816, 816, 817, | 1162 | 732, 730, 729, 726, 723, 722, 715, 714, 711, 710, |
1143 | 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, | 1163 | 799, 709, 708, 705, 704, 799, 701, 700, 693, 692, |
1144 | 817, 818, 708, 707, 818, 818, 818, 818, 818, 818, | 1164 | 689, 688, 687, 686, 810, 813, 813, 813, 813, 813, |
1145 | 818, 818, 818, 819, 819, 700, 819, 819, 820, 820, | 1165 | 813, 813, 813, 813, 813, 813, 813, 814, 814, 814, |
1146 | 820, 699, 820, 820, 820, 821, 821, 696, 821, 825, | 1166 | 814, 814, 814, 814, 814, 814, 814, 814, 814, 815, |
1147 | 825, 695, 825, 825, 694, 693, 825, 827, 827, 690, | 1167 | 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, |
1148 | 827, 827, 689, 686, 827, 829, 829, 685, 829, 829, | 1168 | 815, 816, 816, 816, 816, 816, 816, 816, 816, 816, |
1149 | 678, 677, 829, 830, 830, 674, 830, 830, 673, 672, | 1169 | 816, 816, 816, 817, 817, 817, 817, 817, 817, 817, |
1150 | 830, 831, 831, 671, 831, 831, 668, 667, 831, 659, | 1170 | 817, 817, 817, 817, 817, 819, 819, 819, 683, 819, |
1151 | 1171 | ||
1152 | 658, 651, 650, 649, 648, 645, 644, 643, 642, 635, | 1172 | 819, 819, 820, 820, 682, 820, 820, 821, 674, 821, |
1153 | 634, 633, 632, 631, 630, 623, 622, 617, 616, 615, | 1173 | 821, 821, 821, 821, 821, 821, 821, 821, 821, 822, |
1154 | 614, 613, 612, 605, 604, 596, 595, 594, 592, 591, | 1174 | 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, |
1155 | 590, 571, 570, 569, 568, 567, 566, 559, 558, 557, | 1175 | 822, 823, 823, 823, 823, 823, 823, 823, 823, 823, |
1156 | 556, 555, 554, 553, 552, 551, 550, 549, 548, 541, | 1176 | 823, 823, 823, 824, 824, 673, 824, 824, 825, 825, |
1157 | 540, 539, 538, 537, 536, 526, 525, 524, 523, 521, | 1177 | 666, 825, 825, 825, 826, 826, 665, 826, 826, 827, |
1158 | 520, 519, 500, 499, 498, 497, 496, 495, 494, 493, | 1178 | 827, 664, 827, 827, 827, 828, 828, 828, 828, 828, |
1159 | 486, 485, 484, 483, 482, 481, 480, 479, 478, 477, | 1179 | 828, 828, 828, 828, 828, 828, 828, 829, 829, 829, |
1160 | 476, 475, 474, 473, 466, 465, 464, 463, 462, 461, | 1180 | 829, 829, 829, 829, 829, 829, 829, 829, 829, 830, |
1161 | 450, 449, 448, 447, 446, 445, 444, 443, 442, 428, | 1181 | 663, 830, 830, 830, 830, 830, 830, 830, 830, 830, |
1162 | 1182 | ||
1163 | 420, 419, 418, 417, 416, 415, 414, 413, 412, 405, | 1183 | 830, 831, 650, 649, 831, 831, 831, 831, 831, 831, |
1164 | 404, 403, 402, 401, 400, 399, 398, 397, 396, 395, | 1184 | 831, 831, 831, 832, 832, 832, 832, 832, 832, 832, |
1165 | 394, 393, 392, 391, 383, 382, 381, 380, 379, 378, | 1185 | 832, 832, 832, 832, 832, 833, 638, 637, 833, 833, |
1166 | 368, 367, 365, 364, 363, 361, 360, 358, 352, 344, | 1186 | 833, 833, 833, 833, 833, 833, 833, 834, 834, 632, |
1167 | 336, 332, 331, 330, 329, 326, 322, 318, 317, 316, | 1187 | 834, 834, 835, 835, 835, 631, 835, 835, 835, 836, |
1168 | 315, 312, 311, 310, 309, 306, 302, 297, 296, 295, | 1188 | 836, 630, 836, 840, 840, 629, 840, 840, 628, 627, |
1169 | 292, 281, 276, 274, 273, 272, 271, 270, 264, 247, | 1189 | 840, 842, 842, 620, 842, 842, 619, 611, 842, 844, |
1170 | 242, 235, 234, 233, 232, 229, 228, 227, 226, 220, | 1190 | 844, 610, 844, 844, 609, 607, 844, 845, 845, 606, |
1171 | 219, 217, 215, 214, 213, 206, 205, 203, 201, 200, | 1191 | 845, 845, 605, 586, 845, 846, 846, 585, 846, 846, |
1172 | 199, 197, 195, 194, 193, 190, 184, 183, 182, 179, | 1192 | 584, 583, 846, 582, 581, 574, 573, 572, 571, 570, |
1173 | 1193 | ||
1174 | 174, 173, 171, 170, 169, 159, 157, 148, 147, 146, | 1194 | 569, 568, 567, 566, 565, 564, 563, 556, 555, 554, |
1175 | 145, 144, 142, 124, 110, 109, 108, 107, 101, 100, | 1195 | 553, 552, 551, 541, 540, 539, 538, 536, 535, 534, |
1176 | 99, 98, 97, 96, 95, 87, 86, 85, 84, 83, | 1196 | 514, 513, 512, 511, 510, 509, 508, 500, 499, 498, |
1177 | 82, 81, 78, 77, 76, 75, 74, 73, 72, 71, | 1197 | 497, 496, 495, 494, 493, 492, 491, 490, 489, 488, |
1178 | 70, 68, 56, 52, 49, 48, 47, 46, 45, 44, | 1198 | 481, 480, 479, 478, 477, 476, 465, 464, 463, 462, |
1179 | 33, 32, 31, 30, 27, 23, 797, 797, 797, 797, | 1199 | 461, 460, 459, 458, 457, 443, 435, 433, 432, 431, |
1180 | 797, 797, 797, 797, 797, 797, 797, 797, 797, 797, | 1200 | 430, 429, 428, 427, 420, 418, 417, 416, 415, 414, |
1181 | 797, 797, 797, 797, 797, 797, 797, 797, 797, 797, | 1201 | 413, 412, 411, 410, 409, 408, 407, 406, 398, 397, |
1182 | 797, 797, 797, 797, 797, 797, 797, 797, 797, 797, | 1202 | 396, 395, 394, 393, 383, 382, 380, 379, 378, 376, |
1183 | 797, 797, 797, 797, 797, 797, 797, 797, 797, 797, | 1203 | 375, 373, 367, 359, 347, 346, 345, 344, 341, 333, |
1184 | 1204 | ||
1185 | 797, 797, 797, 797, 797, 797, 797, 797, 797, 797, | 1205 | 332, 331, 330, 327, 326, 325, 324, 321, 317, 312, |
1186 | 797, 797, 797, 797, 797 | 1206 | 311, 310, 307, 296, 291, 289, 288, 287, 286, 285, |
1207 | 279, 260, 255, 248, 247, 246, 245, 244, 243, 240, | ||
1208 | 239, 238, 237, 230, 228, 226, 225, 224, 216, 214, | ||
1209 | 212, 211, 210, 208, 206, 205, 204, 201, 195, 194, | ||
1210 | 193, 192, 191, 188, 183, 182, 180, 179, 178, 168, | ||
1211 | 166, 155, 154, 153, 152, 151, 149, 130, 115, 114, | ||
1212 | 113, 112, 104, 103, 102, 101, 100, 99, 89, 88, | ||
1213 | 87, 86, 85, 84, 81, 80, 79, 78, 77, 76, | ||
1214 | 74, 73, 72, 70, 58, 53, 50, 49, 48, 47, | ||
1215 | |||
1216 | 46, 45, 34, 32, 31, 30, 27, 23, 812, 812, | ||
1217 | 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, | ||
1218 | 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, | ||
1219 | 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, | ||
1220 | 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, | ||
1221 | 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, | ||
1222 | 812, 812, 812, 812, 812, 812, 812 | ||
1187 | } ; | 1223 | } ; |
1188 | 1224 | ||
1189 | /* Table of booleans, true if rule could match eol. */ | 1225 | /* Table of booleans, true if rule could match eol. */ |
1190 | static yyconst flex_int32_t yy_rule_can_match_eol[46] = | 1226 | static yyconst flex_int32_t yy_rule_can_match_eol[48] = |
1191 | { 0, | 1227 | { 0, |
1192 | 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, | 1228 | 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, |
1193 | 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, | 1229 | 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, |
1194 | 1, 1, 1, 1, 0, 0, }; | 1230 | 0, 0, 1, 1, 1, 1, 0, 0, }; |
1195 | 1231 | ||
1196 | /* The intent behind this definition is that it'll catch | 1232 | /* The intent behind this definition is that it'll catch |
1197 | * any uses of REJECT which flex missed. | 1233 | * any uses of REJECT which flex missed. |
@@ -1279,6 +1315,7 @@ extern void bbparseTrace(FILE *TraceFILE, char *zTracePrompt); | |||
1279 | //static const char* rgbInput; | 1315 | //static const char* rgbInput; |
1280 | //static size_t cbInput; | 1316 | //static size_t cbInput; |
1281 | 1317 | ||
1318 | extern "C" { | ||
1282 | 1319 | ||
1283 | int lineError; | 1320 | int lineError; |
1284 | int errorParse; | 1321 | int errorParse; |
@@ -1289,6 +1326,8 @@ enum { | |||
1289 | errorUnsupportedFeature, | 1326 | errorUnsupportedFeature, |
1290 | }; | 1327 | }; |
1291 | 1328 | ||
1329 | } | ||
1330 | |||
1292 | #define YY_EXTRA_TYPE lex_t* | 1331 | #define YY_EXTRA_TYPE lex_t* |
1293 | 1332 | ||
1294 | /* Read from buffer */ | 1333 | /* Read from buffer */ |
@@ -1312,7 +1351,7 @@ static const char* fixup_escapes (const char* sz); | |||
1312 | 1351 | ||
1313 | 1352 | ||
1314 | 1353 | ||
1315 | #line 1316 "<stdout>" | 1354 | #line 1355 "<stdout>" |
1316 | 1355 | ||
1317 | #define INITIAL 0 | 1356 | #define INITIAL 0 |
1318 | #define S_DEF 1 | 1357 | #define S_DEF 1 |
@@ -1326,11 +1365,13 @@ static const char* fixup_escapes (const char* sz); | |||
1326 | #define S_RVALUE 9 | 1365 | #define S_RVALUE 9 |
1327 | #define S_TASK 10 | 1366 | #define S_TASK 10 |
1328 | 1367 | ||
1368 | #ifndef YY_NO_UNISTD_H | ||
1329 | /* Special case for "unistd.h", since it is non-ANSI. We include it way | 1369 | /* Special case for "unistd.h", since it is non-ANSI. We include it way |
1330 | * down here because we want the user's section 1 to have been scanned first. | 1370 | * down here because we want the user's section 1 to have been scanned first. |
1331 | * The user has a chance to override it with an option. | 1371 | * The user has a chance to override it with an option. |
1332 | */ | 1372 | */ |
1333 | #include <unistd.h> | 1373 | #include <unistd.h> |
1374 | #endif | ||
1334 | 1375 | ||
1335 | #ifndef YY_EXTRA_TYPE | 1376 | #ifndef YY_EXTRA_TYPE |
1336 | #define YY_EXTRA_TYPE void * | 1377 | #define YY_EXTRA_TYPE void * |
@@ -1370,6 +1411,8 @@ struct yyguts_t | |||
1370 | 1411 | ||
1371 | }; /* end struct yyguts_t */ | 1412 | }; /* end struct yyguts_t */ |
1372 | 1413 | ||
1414 | static int yy_init_globals (yyscan_t yyscanner ); | ||
1415 | |||
1373 | /* Accessor methods to globals. | 1416 | /* Accessor methods to globals. |
1374 | These are made visible to non-reentrant scanners for convenience. */ | 1417 | These are made visible to non-reentrant scanners for convenience. */ |
1375 | 1418 | ||
@@ -1541,10 +1584,10 @@ YY_DECL | |||
1541 | register int yy_act; | 1584 | register int yy_act; |
1542 | struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; | 1585 | struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; |
1543 | 1586 | ||
1544 | #line 159 "bitbakescanner.l" | 1587 | #line 164 "bitbakescanner.l" |
1545 | 1588 | ||
1546 | 1589 | ||
1547 | #line 1548 "<stdout>" | 1590 | #line 1591 "<stdout>" |
1548 | 1591 | ||
1549 | if ( yyg->yy_init ) | 1592 | if ( yyg->yy_init ) |
1550 | { | 1593 | { |
@@ -1597,13 +1640,13 @@ yy_match: | |||
1597 | while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) | 1640 | while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) |
1598 | { | 1641 | { |
1599 | yy_current_state = (int) yy_def[yy_current_state]; | 1642 | yy_current_state = (int) yy_def[yy_current_state]; |
1600 | if ( yy_current_state >= 798 ) | 1643 | if ( yy_current_state >= 813 ) |
1601 | yy_c = yy_meta[(unsigned int) yy_c]; | 1644 | yy_c = yy_meta[(unsigned int) yy_c]; |
1602 | } | 1645 | } |
1603 | yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; | 1646 | yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; |
1604 | ++yy_cp; | 1647 | ++yy_cp; |
1605 | } | 1648 | } |
1606 | while ( yy_current_state != 797 ); | 1649 | while ( yy_current_state != 812 ); |
1607 | yy_cp = yyg->yy_last_accepting_cpos; | 1650 | yy_cp = yyg->yy_last_accepting_cpos; |
1608 | yy_current_state = yyg->yy_last_accepting_state; | 1651 | yy_current_state = yyg->yy_last_accepting_state; |
1609 | 1652 | ||
@@ -1637,44 +1680,56 @@ do_action: /* This label is used only to access EOF actions. */ | |||
1637 | 1680 | ||
1638 | case 1: | 1681 | case 1: |
1639 | YY_RULE_SETUP | 1682 | YY_RULE_SETUP |
1640 | #line 161 "bitbakescanner.l" | 1683 | #line 166 "bitbakescanner.l" |
1641 | { BEGIN S_RVALUE; | 1684 | { BEGIN S_RVALUE; |
1642 | yyextra->accept (T_OP_APPEND); } | 1685 | yyextra->accept (T_OP_APPEND); } |
1643 | YY_BREAK | 1686 | YY_BREAK |
1644 | case 2: | 1687 | case 2: |
1645 | YY_RULE_SETUP | 1688 | YY_RULE_SETUP |
1646 | #line 163 "bitbakescanner.l" | 1689 | #line 168 "bitbakescanner.l" |
1647 | { BEGIN S_RVALUE; | 1690 | { BEGIN S_RVALUE; |
1648 | yyextra->accept (T_OP_PREPEND); } | 1691 | yyextra->accept (T_OP_PREPEND); } |
1649 | YY_BREAK | 1692 | YY_BREAK |
1650 | case 3: | 1693 | case 3: |
1651 | YY_RULE_SETUP | 1694 | YY_RULE_SETUP |
1652 | #line 165 "bitbakescanner.l" | 1695 | #line 170 "bitbakescanner.l" |
1653 | { BEGIN S_RVALUE; | 1696 | { BEGIN S_RVALUE; |
1654 | yyextra->accept (T_OP_IMMEDIATE); } | 1697 | yyextra->accept (T_OP_IMMEDIATE); } |
1655 | YY_BREAK | 1698 | YY_BREAK |
1656 | case 4: | 1699 | case 4: |
1657 | YY_RULE_SETUP | 1700 | YY_RULE_SETUP |
1658 | #line 167 "bitbakescanner.l" | 1701 | #line 172 "bitbakescanner.l" |
1659 | { BEGIN S_RVALUE; | 1702 | { BEGIN S_RVALUE; |
1660 | yyextra->accept (T_OP_ASSIGN); } | 1703 | yyextra->accept (T_OP_ASSIGN); } |
1661 | YY_BREAK | 1704 | YY_BREAK |
1662 | case 5: | 1705 | case 5: |
1663 | YY_RULE_SETUP | 1706 | YY_RULE_SETUP |
1664 | #line 169 "bitbakescanner.l" | 1707 | #line 174 "bitbakescanner.l" |
1665 | { BEGIN S_RVALUE; | 1708 | { BEGIN S_RVALUE; |
1666 | yyextra->accept (T_OP_COND); } | 1709 | yyextra->accept (T_OP_PREDOT); } |
1667 | YY_BREAK | 1710 | YY_BREAK |
1668 | case 6: | 1711 | case 6: |
1669 | /* rule 6 can match eol */ | ||
1670 | YY_RULE_SETUP | 1712 | YY_RULE_SETUP |
1671 | #line 172 "bitbakescanner.l" | 1713 | #line 176 "bitbakescanner.l" |
1672 | { } | 1714 | { BEGIN S_RVALUE; |
1715 | yyextra->accept (T_OP_POSTDOT); } | ||
1673 | YY_BREAK | 1716 | YY_BREAK |
1674 | case 7: | 1717 | case 7: |
1675 | /* rule 7 can match eol */ | ||
1676 | YY_RULE_SETUP | 1718 | YY_RULE_SETUP |
1677 | #line 173 "bitbakescanner.l" | 1719 | #line 178 "bitbakescanner.l" |
1720 | { BEGIN S_RVALUE; | ||
1721 | yyextra->accept (T_OP_COND); } | ||
1722 | YY_BREAK | ||
1723 | case 8: | ||
1724 | /* rule 8 can match eol */ | ||
1725 | YY_RULE_SETUP | ||
1726 | #line 181 "bitbakescanner.l" | ||
1727 | { } | ||
1728 | YY_BREAK | ||
1729 | case 9: | ||
1730 | /* rule 9 can match eol */ | ||
1731 | YY_RULE_SETUP | ||
1732 | #line 182 "bitbakescanner.l" | ||
1678 | { BEGIN INITIAL; | 1733 | { BEGIN INITIAL; |
1679 | size_t cb = yyleng; | 1734 | size_t cb = yyleng; |
1680 | while (cb && isspace (yytext[cb - 1])) | 1735 | while (cb && isspace (yytext[cb - 1])) |
@@ -1682,10 +1737,10 @@ YY_RULE_SETUP | |||
1682 | yytext[cb - 1] = 0; | 1737 | yytext[cb - 1] = 0; |
1683 | yyextra->accept (T_STRING, yytext + 1); } | 1738 | yyextra->accept (T_STRING, yytext + 1); } |
1684 | YY_BREAK | 1739 | YY_BREAK |
1685 | case 8: | 1740 | case 10: |
1686 | /* rule 8 can match eol */ | 1741 | /* rule 10 can match eol */ |
1687 | YY_RULE_SETUP | 1742 | YY_RULE_SETUP |
1688 | #line 179 "bitbakescanner.l" | 1743 | #line 188 "bitbakescanner.l" |
1689 | { BEGIN INITIAL; | 1744 | { BEGIN INITIAL; |
1690 | size_t cb = yyleng; | 1745 | size_t cb = yyleng; |
1691 | while (cb && isspace (yytext[cb - 1])) | 1746 | while (cb && isspace (yytext[cb - 1])) |
@@ -1693,208 +1748,208 @@ YY_RULE_SETUP | |||
1693 | yytext[cb - 1] = 0; | 1748 | yytext[cb - 1] = 0; |
1694 | yyextra->accept (T_STRING, yytext + 1); } | 1749 | yyextra->accept (T_STRING, yytext + 1); } |
1695 | YY_BREAK | 1750 | YY_BREAK |
1696 | case 9: | 1751 | case 11: |
1697 | /* rule 9 can match eol */ | 1752 | /* rule 11 can match eol */ |
1698 | YY_RULE_SETUP | 1753 | YY_RULE_SETUP |
1699 | #line 186 "bitbakescanner.l" | 1754 | #line 195 "bitbakescanner.l" |
1700 | { ERROR (errorUnexpectedInput); } | 1755 | { ERROR (errorUnexpectedInput); } |
1701 | YY_BREAK | 1756 | YY_BREAK |
1702 | case 10: | 1757 | case 12: |
1703 | /* rule 10 can match eol */ | 1758 | /* rule 12 can match eol */ |
1704 | YY_RULE_SETUP | 1759 | YY_RULE_SETUP |
1705 | #line 187 "bitbakescanner.l" | 1760 | #line 196 "bitbakescanner.l" |
1706 | { BEGIN INITIAL; | 1761 | { BEGIN INITIAL; |
1707 | yyextra->accept (T_STRING, NULL); } | 1762 | yyextra->accept (T_STRING, NULL); } |
1708 | YY_BREAK | 1763 | YY_BREAK |
1709 | case 11: | 1764 | case 13: |
1710 | YY_RULE_SETUP | 1765 | YY_RULE_SETUP |
1711 | #line 190 "bitbakescanner.l" | 1766 | #line 199 "bitbakescanner.l" |
1712 | { BEGIN S_INCLUDE; | 1767 | { BEGIN S_INCLUDE; |
1713 | yyextra->accept (T_INCLUDE); } | 1768 | yyextra->accept (T_INCLUDE); } |
1714 | YY_BREAK | 1769 | YY_BREAK |
1715 | case 12: | 1770 | case 14: |
1716 | YY_RULE_SETUP | 1771 | YY_RULE_SETUP |
1717 | #line 192 "bitbakescanner.l" | 1772 | #line 201 "bitbakescanner.l" |
1718 | { BEGIN S_REQUIRE; | 1773 | { BEGIN S_REQUIRE; |
1719 | yyextra->accept (T_REQUIRE); } | 1774 | yyextra->accept (T_REQUIRE); } |
1720 | YY_BREAK | 1775 | YY_BREAK |
1721 | case 13: | 1776 | case 15: |
1722 | YY_RULE_SETUP | 1777 | YY_RULE_SETUP |
1723 | #line 194 "bitbakescanner.l" | 1778 | #line 203 "bitbakescanner.l" |
1724 | { BEGIN S_INHERIT; | 1779 | { BEGIN S_INHERIT; |
1725 | yyextra->accept (T_INHERIT); } | 1780 | yyextra->accept (T_INHERIT); } |
1726 | YY_BREAK | 1781 | YY_BREAK |
1727 | case 14: | 1782 | case 16: |
1728 | YY_RULE_SETUP | 1783 | YY_RULE_SETUP |
1729 | #line 196 "bitbakescanner.l" | 1784 | #line 205 "bitbakescanner.l" |
1730 | { BEGIN S_TASK; | 1785 | { BEGIN S_TASK; |
1731 | yyextra->accept (T_ADDTASK); } | 1786 | yyextra->accept (T_ADDTASK); } |
1732 | YY_BREAK | 1787 | YY_BREAK |
1733 | case 15: | 1788 | case 17: |
1734 | YY_RULE_SETUP | 1789 | YY_RULE_SETUP |
1735 | #line 198 "bitbakescanner.l" | 1790 | #line 207 "bitbakescanner.l" |
1736 | { yyextra->accept (T_ADDHANDLER); } | 1791 | { yyextra->accept (T_ADDHANDLER); } |
1737 | YY_BREAK | 1792 | YY_BREAK |
1738 | case 16: | 1793 | case 18: |
1739 | YY_RULE_SETUP | 1794 | YY_RULE_SETUP |
1740 | #line 199 "bitbakescanner.l" | 1795 | #line 208 "bitbakescanner.l" |
1741 | { BEGIN S_FUNC; | 1796 | { BEGIN S_FUNC; |
1742 | yyextra->accept (T_EXPORT_FUNC); } | 1797 | yyextra->accept (T_EXPORT_FUNC); } |
1743 | YY_BREAK | 1798 | YY_BREAK |
1744 | case 17: | 1799 | case 19: |
1745 | YY_RULE_SETUP | 1800 | YY_RULE_SETUP |
1746 | #line 201 "bitbakescanner.l" | 1801 | #line 210 "bitbakescanner.l" |
1747 | { yyextra->accept (T_BEFORE); } | 1802 | { yyextra->accept (T_BEFORE); } |
1748 | YY_BREAK | 1803 | YY_BREAK |
1749 | case 18: | 1804 | case 20: |
1750 | YY_RULE_SETUP | 1805 | YY_RULE_SETUP |
1751 | #line 202 "bitbakescanner.l" | 1806 | #line 211 "bitbakescanner.l" |
1752 | { yyextra->accept (T_AFTER); } | 1807 | { yyextra->accept (T_AFTER); } |
1753 | YY_BREAK | 1808 | YY_BREAK |
1754 | case 19: | 1809 | case 21: |
1755 | YY_RULE_SETUP | 1810 | YY_RULE_SETUP |
1756 | #line 203 "bitbakescanner.l" | 1811 | #line 212 "bitbakescanner.l" |
1757 | { yyextra->accept (T_EXPORT); } | 1812 | { yyextra->accept (T_EXPORT); } |
1758 | YY_BREAK | 1813 | YY_BREAK |
1759 | case 20: | 1814 | case 22: |
1760 | YY_RULE_SETUP | 1815 | YY_RULE_SETUP |
1761 | #line 205 "bitbakescanner.l" | 1816 | #line 214 "bitbakescanner.l" |
1762 | { yyextra->accept (T_FAKEROOT); } | 1817 | { yyextra->accept (T_FAKEROOT); } |
1763 | YY_BREAK | 1818 | YY_BREAK |
1764 | case 21: | 1819 | case 23: |
1765 | YY_RULE_SETUP | 1820 | YY_RULE_SETUP |
1766 | #line 206 "bitbakescanner.l" | 1821 | #line 215 "bitbakescanner.l" |
1767 | { yyextra->accept (T_PYTHON); } | 1822 | { yyextra->accept (T_PYTHON); } |
1768 | YY_BREAK | 1823 | YY_BREAK |
1769 | case 22: | 1824 | case 24: |
1770 | /* rule 22 can match eol */ | 1825 | /* rule 24 can match eol */ |
1771 | YY_RULE_SETUP | 1826 | YY_RULE_SETUP |
1772 | #line 207 "bitbakescanner.l" | 1827 | #line 216 "bitbakescanner.l" |
1773 | { BEGIN S_PROC; | 1828 | { BEGIN S_PROC; |
1774 | yyextra->accept (T_PROC_OPEN); } | 1829 | yyextra->accept (T_PROC_OPEN); } |
1775 | YY_BREAK | 1830 | YY_BREAK |
1776 | case 23: | 1831 | case 25: |
1777 | /* rule 23 can match eol */ | 1832 | /* rule 25 can match eol */ |
1778 | YY_RULE_SETUP | 1833 | YY_RULE_SETUP |
1779 | #line 209 "bitbakescanner.l" | 1834 | #line 218 "bitbakescanner.l" |
1780 | { BEGIN INITIAL; | 1835 | { BEGIN INITIAL; |
1781 | yyextra->accept (T_PROC_CLOSE); } | 1836 | yyextra->accept (T_PROC_CLOSE); } |
1782 | YY_BREAK | 1837 | YY_BREAK |
1783 | case 24: | 1838 | case 26: |
1784 | /* rule 24 can match eol */ | 1839 | /* rule 26 can match eol */ |
1785 | YY_RULE_SETUP | 1840 | YY_RULE_SETUP |
1786 | #line 211 "bitbakescanner.l" | 1841 | #line 220 "bitbakescanner.l" |
1787 | { yyextra->accept (T_PROC_BODY, yytext); } | 1842 | { yyextra->accept (T_PROC_BODY, yytext); } |
1788 | YY_BREAK | 1843 | YY_BREAK |
1789 | case 25: | 1844 | case 27: |
1790 | YY_RULE_SETUP | 1845 | YY_RULE_SETUP |
1791 | #line 213 "bitbakescanner.l" | 1846 | #line 222 "bitbakescanner.l" |
1792 | { BEGIN S_DEF; } | 1847 | { BEGIN S_DEF; } |
1793 | YY_BREAK | 1848 | YY_BREAK |
1794 | case 26: | 1849 | case 28: |
1795 | YY_RULE_SETUP | 1850 | YY_RULE_SETUP |
1796 | #line 214 "bitbakescanner.l" | 1851 | #line 223 "bitbakescanner.l" |
1797 | { BEGIN S_DEF_ARGS; | 1852 | { BEGIN S_DEF_ARGS; |
1798 | yyextra->accept (T_SYMBOL, yytext); } | 1853 | yyextra->accept (T_SYMBOL, yytext); } |
1799 | YY_BREAK | 1854 | YY_BREAK |
1800 | case 27: | 1855 | case 29: |
1801 | YY_RULE_SETUP | 1856 | YY_RULE_SETUP |
1802 | #line 216 "bitbakescanner.l" | 1857 | #line 225 "bitbakescanner.l" |
1803 | { yyextra->accept (T_DEF_ARGS, yytext); } | 1858 | { yyextra->accept (T_DEF_ARGS, yytext); } |
1804 | YY_BREAK | 1859 | YY_BREAK |
1805 | case 28: | 1860 | case 30: |
1806 | /* rule 28 can match eol */ | 1861 | /* rule 30 can match eol */ |
1807 | YY_RULE_SETUP | 1862 | YY_RULE_SETUP |
1808 | #line 217 "bitbakescanner.l" | 1863 | #line 226 "bitbakescanner.l" |
1809 | { BEGIN S_DEF_BODY; } | 1864 | { BEGIN S_DEF_BODY; } |
1810 | YY_BREAK | 1865 | YY_BREAK |
1811 | case 29: | 1866 | case 31: |
1812 | /* rule 29 can match eol */ | 1867 | /* rule 31 can match eol */ |
1813 | YY_RULE_SETUP | 1868 | YY_RULE_SETUP |
1814 | #line 218 "bitbakescanner.l" | 1869 | #line 227 "bitbakescanner.l" |
1815 | { yyextra->accept (T_DEF_BODY, yytext); } | 1870 | { yyextra->accept (T_DEF_BODY, yytext); } |
1816 | YY_BREAK | 1871 | YY_BREAK |
1817 | case 30: | 1872 | case 32: |
1818 | /* rule 30 can match eol */ | 1873 | /* rule 32 can match eol */ |
1819 | YY_RULE_SETUP | 1874 | YY_RULE_SETUP |
1820 | #line 219 "bitbakescanner.l" | 1875 | #line 228 "bitbakescanner.l" |
1821 | { yyextra->accept (T_DEF_BODY, yytext); } | 1876 | { yyextra->accept (T_DEF_BODY, yytext); } |
1822 | YY_BREAK | 1877 | YY_BREAK |
1823 | case 31: | 1878 | case 33: |
1824 | YY_RULE_SETUP | 1879 | YY_RULE_SETUP |
1825 | #line 220 "bitbakescanner.l" | 1880 | #line 229 "bitbakescanner.l" |
1826 | { BEGIN INITIAL; unput (yytext[0]); } | 1881 | { BEGIN INITIAL; unput (yytext[0]); } |
1827 | YY_BREAK | 1882 | YY_BREAK |
1828 | case 32: | 1883 | case 34: |
1829 | /* rule 32 can match eol */ | 1884 | /* rule 34 can match eol */ |
1830 | YY_RULE_SETUP | 1885 | YY_RULE_SETUP |
1831 | #line 222 "bitbakescanner.l" | 1886 | #line 231 "bitbakescanner.l" |
1832 | { } | 1887 | { } |
1833 | YY_BREAK | 1888 | YY_BREAK |
1834 | case 33: | 1889 | case 35: |
1835 | YY_RULE_SETUP | 1890 | YY_RULE_SETUP |
1836 | #line 224 "bitbakescanner.l" | 1891 | #line 233 "bitbakescanner.l" |
1837 | { yyextra->accept (T_SYMBOL, yytext); } | 1892 | { yyextra->accept (T_SYMBOL, yytext); } |
1838 | YY_BREAK | 1893 | YY_BREAK |
1839 | case 34: | 1894 | case 36: |
1840 | YY_RULE_SETUP | 1895 | YY_RULE_SETUP |
1841 | #line 225 "bitbakescanner.l" | 1896 | #line 234 "bitbakescanner.l" |
1842 | { yyextra->accept (T_VARIABLE, yytext); } | 1897 | { yyextra->accept (T_VARIABLE, yytext); } |
1843 | YY_BREAK | 1898 | YY_BREAK |
1844 | case 35: | 1899 | case 37: |
1845 | YY_RULE_SETUP | 1900 | YY_RULE_SETUP |
1846 | #line 227 "bitbakescanner.l" | 1901 | #line 236 "bitbakescanner.l" |
1847 | { yyextra->accept (T_TSYMBOL, yytext); } | 1902 | { yyextra->accept (T_TSYMBOL, yytext); } |
1848 | YY_BREAK | 1903 | YY_BREAK |
1849 | case 36: | 1904 | case 38: |
1850 | YY_RULE_SETUP | 1905 | YY_RULE_SETUP |
1851 | #line 228 "bitbakescanner.l" | 1906 | #line 237 "bitbakescanner.l" |
1852 | { yyextra->accept (T_FSYMBOL, yytext); } | 1907 | { yyextra->accept (T_FSYMBOL, yytext); } |
1853 | YY_BREAK | 1908 | YY_BREAK |
1854 | case 37: | 1909 | case 39: |
1855 | YY_RULE_SETUP | 1910 | YY_RULE_SETUP |
1856 | #line 229 "bitbakescanner.l" | 1911 | #line 238 "bitbakescanner.l" |
1857 | { yyextra->accept (T_ISYMBOL, yytext); } | 1912 | { yyextra->accept (T_ISYMBOL, yytext); } |
1858 | YY_BREAK | 1913 | YY_BREAK |
1859 | case 38: | 1914 | case 40: |
1860 | YY_RULE_SETUP | 1915 | YY_RULE_SETUP |
1861 | #line 230 "bitbakescanner.l" | 1916 | #line 239 "bitbakescanner.l" |
1862 | { BEGIN INITIAL; | 1917 | { BEGIN INITIAL; |
1863 | yyextra->accept (T_ISYMBOL, yytext); } | 1918 | yyextra->accept (T_ISYMBOL, yytext); } |
1864 | YY_BREAK | 1919 | YY_BREAK |
1865 | case 39: | 1920 | case 41: |
1866 | YY_RULE_SETUP | 1921 | YY_RULE_SETUP |
1867 | #line 232 "bitbakescanner.l" | 1922 | #line 241 "bitbakescanner.l" |
1868 | { BEGIN INITIAL; | 1923 | { BEGIN INITIAL; |
1869 | yyextra->accept (T_ISYMBOL, yytext); } | 1924 | yyextra->accept (T_ISYMBOL, yytext); } |
1870 | YY_BREAK | 1925 | YY_BREAK |
1871 | case 40: | 1926 | case 42: |
1872 | /* rule 40 can match eol */ | 1927 | /* rule 42 can match eol */ |
1873 | YY_RULE_SETUP | 1928 | YY_RULE_SETUP |
1874 | #line 234 "bitbakescanner.l" | 1929 | #line 243 "bitbakescanner.l" |
1875 | { BEGIN INITIAL; } | 1930 | { BEGIN INITIAL; } |
1876 | YY_BREAK | 1931 | YY_BREAK |
1877 | case 41: | 1932 | case 43: |
1878 | /* rule 41 can match eol */ | 1933 | /* rule 43 can match eol */ |
1879 | YY_RULE_SETUP | 1934 | YY_RULE_SETUP |
1880 | #line 235 "bitbakescanner.l" | 1935 | #line 244 "bitbakescanner.l" |
1881 | { BEGIN INITIAL; } | 1936 | { BEGIN INITIAL; } |
1882 | YY_BREAK | 1937 | YY_BREAK |
1883 | case 42: | 1938 | case 44: |
1884 | /* rule 42 can match eol */ | 1939 | /* rule 44 can match eol */ |
1885 | YY_RULE_SETUP | 1940 | YY_RULE_SETUP |
1886 | #line 236 "bitbakescanner.l" | 1941 | #line 245 "bitbakescanner.l" |
1887 | { BEGIN INITIAL; } | 1942 | { BEGIN INITIAL; } |
1888 | YY_BREAK | 1943 | YY_BREAK |
1889 | case 43: | 1944 | case 45: |
1890 | /* rule 43 can match eol */ | 1945 | /* rule 45 can match eol */ |
1891 | YY_RULE_SETUP | 1946 | YY_RULE_SETUP |
1892 | #line 238 "bitbakescanner.l" | 1947 | #line 247 "bitbakescanner.l" |
1893 | /* Insignificant whitespace */ | 1948 | /* Insignificant whitespace */ |
1894 | YY_BREAK | 1949 | YY_BREAK |
1895 | case 44: | 1950 | case 46: |
1896 | YY_RULE_SETUP | 1951 | YY_RULE_SETUP |
1897 | #line 240 "bitbakescanner.l" | 1952 | #line 249 "bitbakescanner.l" |
1898 | { ERROR (errorUnexpectedInput); } | 1953 | { ERROR (errorUnexpectedInput); } |
1899 | YY_BREAK | 1954 | YY_BREAK |
1900 | /* Check for premature termination */ | 1955 | /* Check for premature termination */ |
@@ -1909,15 +1964,15 @@ case YY_STATE_EOF(S_REQUIRE): | |||
1909 | case YY_STATE_EOF(S_PROC): | 1964 | case YY_STATE_EOF(S_PROC): |
1910 | case YY_STATE_EOF(S_RVALUE): | 1965 | case YY_STATE_EOF(S_RVALUE): |
1911 | case YY_STATE_EOF(S_TASK): | 1966 | case YY_STATE_EOF(S_TASK): |
1912 | #line 243 "bitbakescanner.l" | 1967 | #line 252 "bitbakescanner.l" |
1913 | { return T_EOF; } | 1968 | { return T_EOF; } |
1914 | YY_BREAK | 1969 | YY_BREAK |
1915 | case 45: | 1970 | case 47: |
1916 | YY_RULE_SETUP | 1971 | YY_RULE_SETUP |
1917 | #line 245 "bitbakescanner.l" | 1972 | #line 254 "bitbakescanner.l" |
1918 | ECHO; | 1973 | ECHO; |
1919 | YY_BREAK | 1974 | YY_BREAK |
1920 | #line 1921 "<stdout>" | 1975 | #line 1976 "<stdout>" |
1921 | 1976 | ||
1922 | case YY_END_OF_BUFFER: | 1977 | case YY_END_OF_BUFFER: |
1923 | { | 1978 | { |
@@ -2103,7 +2158,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner) | |||
2103 | 2158 | ||
2104 | else | 2159 | else |
2105 | { | 2160 | { |
2106 | size_t num_to_read = | 2161 | int num_to_read = |
2107 | YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; | 2162 | YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; |
2108 | 2163 | ||
2109 | while ( num_to_read <= 0 ) | 2164 | while ( num_to_read <= 0 ) |
@@ -2202,7 +2257,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner) | |||
2202 | while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) | 2257 | while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) |
2203 | { | 2258 | { |
2204 | yy_current_state = (int) yy_def[yy_current_state]; | 2259 | yy_current_state = (int) yy_def[yy_current_state]; |
2205 | if ( yy_current_state >= 798 ) | 2260 | if ( yy_current_state >= 813 ) |
2206 | yy_c = yy_meta[(unsigned int) yy_c]; | 2261 | yy_c = yy_meta[(unsigned int) yy_c]; |
2207 | } | 2262 | } |
2208 | yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; | 2263 | yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; |
@@ -2231,11 +2286,11 @@ static int yy_get_next_buffer (yyscan_t yyscanner) | |||
2231 | while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) | 2286 | while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) |
2232 | { | 2287 | { |
2233 | yy_current_state = (int) yy_def[yy_current_state]; | 2288 | yy_current_state = (int) yy_def[yy_current_state]; |
2234 | if ( yy_current_state >= 798 ) | 2289 | if ( yy_current_state >= 813 ) |
2235 | yy_c = yy_meta[(unsigned int) yy_c]; | 2290 | yy_c = yy_meta[(unsigned int) yy_c]; |
2236 | } | 2291 | } |
2237 | yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; | 2292 | yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; |
2238 | yy_is_jam = (yy_current_state == 797); | 2293 | yy_is_jam = (yy_current_state == 812); |
2239 | 2294 | ||
2240 | return yy_is_jam ? 0 : yy_current_state; | 2295 | return yy_is_jam ? 0 : yy_current_state; |
2241 | } | 2296 | } |
@@ -2675,10 +2730,10 @@ YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size , yyscan_t yyscann | |||
2675 | * @note If you want to scan bytes that may contain NUL values, then use | 2730 | * @note If you want to scan bytes that may contain NUL values, then use |
2676 | * yy_scan_bytes() instead. | 2731 | * yy_scan_bytes() instead. |
2677 | */ | 2732 | */ |
2678 | YY_BUFFER_STATE yy_scan_string (yyconst char * str , yyscan_t yyscanner) | 2733 | YY_BUFFER_STATE yy_scan_string (yyconst char * yy_str , yyscan_t yyscanner) |
2679 | { | 2734 | { |
2680 | 2735 | ||
2681 | return yy_scan_bytes(str,strlen(str) ,yyscanner); | 2736 | return yy_scan_bytes(yy_str,strlen(yy_str) ,yyscanner); |
2682 | } | 2737 | } |
2683 | 2738 | ||
2684 | /** Setup the input buffer state to scan the given bytes. The next call to yylex() will | 2739 | /** Setup the input buffer state to scan the given bytes. The next call to yylex() will |
@@ -3077,7 +3132,7 @@ void yyfree (void * ptr , yyscan_t yyscanner) | |||
3077 | #undef YY_DECL_IS_OURS | 3132 | #undef YY_DECL_IS_OURS |
3078 | #undef YY_DECL | 3133 | #undef YY_DECL |
3079 | #endif | 3134 | #endif |
3080 | #line 245 "bitbakescanner.l" | 3135 | #line 254 "bitbakescanner.l" |
3081 | 3136 | ||
3082 | 3137 | ||
3083 | 3138 | ||
@@ -3091,36 +3146,56 @@ void lex_t::accept (int token, const char* sz) | |||
3091 | parse (parser, token, t, this); | 3146 | parse (parser, token, t, this); |
3092 | } | 3147 | } |
3093 | 3148 | ||
3094 | int lex_t::line ()const | 3149 | void lex_t::input (char *buf, int *result, int max_size) |
3095 | { | 3150 | { |
3096 | return yyget_lineno (scanner); | 3151 | printf("lex_t::input %p %d\n", buf, max_size); |
3152 | *result = fread(buf, 1, max_size, file); | ||
3153 | printf("lex_t::input result %d\n", *result); | ||
3097 | } | 3154 | } |
3098 | 3155 | ||
3099 | void parse (FILE* file, PyObject* data) | 3156 | int lex_t::line ()const |
3100 | { | 3157 | { |
3101 | void* parser = bbparseAlloc (malloc); | 3158 | printf("lex_t::line\n"); |
3102 | yyscan_t scanner; | 3159 | return yyget_lineno (scanner); |
3103 | lex_t lex; | 3160 | } |
3104 | |||
3105 | yylex_init (&scanner); | ||
3106 | |||
3107 | lex.parser = parser; | ||
3108 | lex.scanner = scanner; | ||
3109 | lex.file = file; | ||
3110 | lex.data = data; | ||
3111 | lex.parse = bbparse; | ||
3112 | yyset_extra (&lex, scanner); | ||
3113 | |||
3114 | 3161 | ||
3115 | int result = yylex (scanner); | ||
3116 | 3162 | ||
3117 | lex.accept (0); | 3163 | extern "C" { |
3118 | bbparseTrace (NULL, NULL); | ||
3119 | 3164 | ||
3120 | if (result != T_EOF) | 3165 | void parse (FILE* file, PyObject* data) |
3121 | printf ("premature end of file\n"); | 3166 | { |
3167 | printf("parse bbparseAlloc\n"); | ||
3168 | void* parser = bbparseAlloc (malloc); | ||
3169 | yyscan_t scanner; | ||
3170 | lex_t lex; | ||
3171 | |||
3172 | printf("parse yylex_init\n"); | ||
3173 | yylex_init (&scanner); | ||
3174 | |||
3175 | lex.parser = parser; | ||
3176 | lex.scanner = scanner; | ||
3177 | lex.file = file; | ||
3178 | lex.data = data; | ||
3179 | lex.parse = bbparse; | ||
3180 | printf("parse yyset_extra\n"); | ||
3181 | yyset_extra (&lex, scanner); | ||
3182 | |||
3183 | printf("parse yylex\n"); | ||
3184 | int result = yylex (scanner); | ||
3185 | |||
3186 | printf("parse result %d\n", result); | ||
3187 | |||
3188 | lex.accept (0); | ||
3189 | printf("parse lex.accept\n"); | ||
3190 | bbparseTrace (NULL, NULL); | ||
3191 | printf("parse bbparseTrace\n"); | ||
3192 | |||
3193 | if (result != T_EOF) | ||
3194 | printf ("premature end of file\n"); | ||
3195 | |||
3196 | yylex_destroy (scanner); | ||
3197 | bbparseFree (parser, free); | ||
3198 | } | ||
3122 | 3199 | ||
3123 | yylex_destroy (scanner); | ||
3124 | bbparseFree (parser, free); | ||
3125 | } | 3200 | } |
3126 | 3201 | ||
diff --git a/bitbake/lib/bb/parse/parse_c/bitbakescanner.l b/bitbake/lib/bb/parse/parse_c/bitbakescanner.l index 782bc57a0f..f69a7325c3 100644 --- a/bitbake/lib/bb/parse/parse_c/bitbakescanner.l +++ b/bitbake/lib/bb/parse/parse_c/bitbakescanner.l | |||
@@ -83,6 +83,7 @@ extern void bbparseTrace(FILE *TraceFILE, char *zTracePrompt); | |||
83 | //static const char* rgbInput; | 83 | //static const char* rgbInput; |
84 | //static size_t cbInput; | 84 | //static size_t cbInput; |
85 | 85 | ||
86 | extern "C" { | ||
86 | 87 | ||
87 | int lineError; | 88 | int lineError; |
88 | int errorParse; | 89 | int errorParse; |
@@ -93,6 +94,8 @@ enum { | |||
93 | errorUnsupportedFeature, | 94 | errorUnsupportedFeature, |
94 | }; | 95 | }; |
95 | 96 | ||
97 | } | ||
98 | |||
96 | #define YY_EXTRA_TYPE lex_t* | 99 | #define YY_EXTRA_TYPE lex_t* |
97 | 100 | ||
98 | /* Read from buffer */ | 101 | /* Read from buffer */ |
@@ -112,6 +115,8 @@ static const char* fixup_escapes (const char* sz); | |||
112 | C_SP [ \t] | 115 | C_SP [ \t] |
113 | COMMENT #.*\n | 116 | COMMENT #.*\n |
114 | OP_ASSIGN "=" | 117 | OP_ASSIGN "=" |
118 | OP_PREDOT ".=" | ||
119 | OP_POSTDOT "=." | ||
115 | OP_IMMEDIATE ":=" | 120 | OP_IMMEDIATE ":=" |
116 | OP_PREPEND "=+" | 121 | OP_PREPEND "=+" |
117 | OP_APPEND "+=" | 122 | OP_APPEND "+=" |
@@ -166,6 +171,10 @@ PROC \({C_SP}*\) | |||
166 | yyextra->accept (T_OP_IMMEDIATE); } | 171 | yyextra->accept (T_OP_IMMEDIATE); } |
167 | {OP_ASSIGN} { BEGIN S_RVALUE; | 172 | {OP_ASSIGN} { BEGIN S_RVALUE; |
168 | yyextra->accept (T_OP_ASSIGN); } | 173 | yyextra->accept (T_OP_ASSIGN); } |
174 | {OP_PREDOT} { BEGIN S_RVALUE; | ||
175 | yyextra->accept (T_OP_PREDOT); } | ||
176 | {OP_POSTDOT} { BEGIN S_RVALUE; | ||
177 | yyextra->accept (T_OP_POSTDOT); } | ||
169 | {OP_COND} { BEGIN S_RVALUE; | 178 | {OP_COND} { BEGIN S_RVALUE; |
170 | yyextra->accept (T_OP_COND); } | 179 | yyextra->accept (T_OP_COND); } |
171 | 180 | ||
@@ -254,35 +263,55 @@ void lex_t::accept (int token, const char* sz) | |||
254 | parse (parser, token, t, this); | 263 | parse (parser, token, t, this); |
255 | } | 264 | } |
256 | 265 | ||
266 | void lex_t::input (char *buf, int *result, int max_size) | ||
267 | { | ||
268 | printf("lex_t::input %p %d\n", buf, max_size); | ||
269 | *result = fread(buf, 1, max_size, file); | ||
270 | printf("lex_t::input result %d\n", *result); | ||
271 | } | ||
272 | |||
257 | int lex_t::line ()const | 273 | int lex_t::line ()const |
258 | { | 274 | { |
275 | printf("lex_t::line\n"); | ||
259 | return yyget_lineno (scanner); | 276 | return yyget_lineno (scanner); |
260 | } | 277 | } |
261 | 278 | ||
262 | void parse (FILE* file, PyObject* data) | ||
263 | { | ||
264 | void* parser = bbparseAlloc (malloc); | ||
265 | yyscan_t scanner; | ||
266 | lex_t lex; | ||
267 | 279 | ||
268 | yylex_init (&scanner); | 280 | extern "C" { |
281 | |||
282 | void parse (FILE* file, PyObject* data) | ||
283 | { | ||
284 | printf("parse bbparseAlloc\n"); | ||
285 | void* parser = bbparseAlloc (malloc); | ||
286 | yyscan_t scanner; | ||
287 | lex_t lex; | ||
288 | |||
289 | printf("parse yylex_init\n"); | ||
290 | yylex_init (&scanner); | ||
269 | 291 | ||
270 | lex.parser = parser; | 292 | lex.parser = parser; |
271 | lex.scanner = scanner; | 293 | lex.scanner = scanner; |
272 | lex.file = file; | 294 | lex.file = file; |
273 | lex.data = data; | 295 | lex.data = data; |
274 | lex.parse = bbparse; | 296 | lex.parse = bbparse; |
275 | yyset_extra (&lex, scanner); | 297 | printf("parse yyset_extra\n"); |
298 | yyset_extra (&lex, scanner); | ||
276 | 299 | ||
300 | printf("parse yylex\n"); | ||
301 | int result = yylex (scanner); | ||
302 | |||
303 | printf("parse result %d\n", result); | ||
277 | 304 | ||
278 | int result = yylex (scanner); | 305 | lex.accept (0); |
306 | printf("parse lex.accept\n"); | ||
307 | bbparseTrace (NULL, NULL); | ||
308 | printf("parse bbparseTrace\n"); | ||
279 | 309 | ||
280 | lex.accept (0); | 310 | if (result != T_EOF) |
281 | bbparseTrace (NULL, NULL); | 311 | printf ("premature end of file\n"); |
282 | 312 | ||
283 | if (result != T_EOF) | 313 | yylex_destroy (scanner); |
284 | printf ("premature end of file\n"); | 314 | bbparseFree (parser, free); |
315 | } | ||
285 | 316 | ||
286 | yylex_destroy (scanner); | ||
287 | bbparseFree (parser, free); | ||
288 | } | 317 | } |
diff --git a/bitbake/lib/bb/parse/parse_c/lexer.h b/bitbake/lib/bb/parse/parse_c/lexer.h index 0a985edf23..651f3a8618 100644 --- a/bitbake/lib/bb/parse/parse_c/lexer.h +++ b/bitbake/lib/bb/parse/parse_c/lexer.h | |||
@@ -24,30 +24,23 @@ THE USE OR OTHER DEALINGS IN THE SOFTWARE. | |||
24 | #ifndef LEXER_H | 24 | #ifndef LEXER_H |
25 | #define LEXER_H | 25 | #define LEXER_H |
26 | 26 | ||
27 | /* | 27 | #include "Python.h" |
28 | * The PyObject Token. Likely to be | 28 | |
29 | * a bb.data implementation | 29 | extern "C" { |
30 | */ | 30 | |
31 | struct PyObject; | ||
32 | |||
33 | |||
34 | /** | ||
35 | * This is used by the Parser and Scanner | ||
36 | * of BitBake. | ||
37 | * The implementation and creation is done | ||
38 | * in the scanner. | ||
39 | */ | ||
40 | struct lex_t { | 31 | struct lex_t { |
41 | void *parser; | 32 | void* parser; |
42 | void *scanner; | 33 | void* scanner; |
43 | FILE *file; | 34 | FILE* file; |
44 | PyObject *data; | 35 | PyObject *data; |
36 | |||
45 | void* (*parse)(void*, int, token_t, lex_t*); | 37 | void* (*parse)(void*, int, token_t, lex_t*); |
46 | 38 | ||
47 | void accept(int token, const char* string = 0); | 39 | void accept(int token, const char* sz = NULL); |
48 | void input(char *buf, int *result, int max_size); | 40 | void input(char *buf, int *result, int max_size); |
49 | int line()const; | 41 | int line()const; |
50 | }; | 42 | }; |
51 | 43 | ||
44 | } | ||
52 | 45 | ||
53 | #endif | 46 | #endif |
diff --git a/bitbake/lib/bb/parse/parse_c/lexerc.h b/bitbake/lib/bb/parse/parse_c/lexerc.h new file mode 100644 index 0000000000..0163a7d632 --- /dev/null +++ b/bitbake/lib/bb/parse/parse_c/lexerc.h | |||
@@ -0,0 +1,17 @@ | |||
1 | |||
2 | #ifndef LEXERC_H | ||
3 | #define LEXERC_H | ||
4 | |||
5 | #include <stdio.h> | ||
6 | |||
7 | extern int lineError; | ||
8 | extern int errorParse; | ||
9 | |||
10 | typedef struct { | ||
11 | void *parser; | ||
12 | void *scanner; | ||
13 | FILE *file; | ||
14 | PyObject *data; | ||
15 | } lex_t; | ||
16 | |||
17 | #endif | ||
diff --git a/bitbake/lib/bb/parse/parse_c/python_output.h b/bitbake/lib/bb/parse/parse_c/python_output.h index de7544cc9d..bf34527c0a 100644 --- a/bitbake/lib/bb/parse/parse_c/python_output.h +++ b/bitbake/lib/bb/parse/parse_c/python_output.h | |||
@@ -27,15 +27,19 @@ This is the glue: | |||
27 | 27 | ||
28 | */ | 28 | */ |
29 | 29 | ||
30 | extern "C" { | ||
31 | |||
30 | struct lex_t; | 32 | struct lex_t; |
31 | 33 | ||
32 | extern void e_assign(lex_t*, const char*, const char*); | 34 | extern void e_assign(lex_t*, const char*, const char*); |
33 | extern void e_export(lex_t*, const char*); | 35 | extern void e_export(lex_t*, const char*); |
34 | extern void e_immediate(lex_t*, const char*, const char*); | 36 | extern void e_immediate(lex_t*, const char*, const char*); |
35 | extern void e_cond(lex_t*, const char*, const char*); | 37 | extern void e_cond(lex_t*, const char*, const char*); |
36 | extern void e_assign(lex_t*, const char*, const char*); | ||
37 | extern void e_prepend(lex_t*, const char*, const char*); | 38 | extern void e_prepend(lex_t*, const char*, const char*); |
38 | extern void e_append(lex_t*, const char*, const char*); | 39 | extern void e_append(lex_t*, const char*, const char*); |
40 | extern void e_precat(lex_t*, const char*, const char*); | ||
41 | extern void e_postcat(lex_t*, const char*, const char*); | ||
42 | |||
39 | extern void e_addtask(lex_t*, const char*, const char*, const char*); | 43 | extern void e_addtask(lex_t*, const char*, const char*, const char*); |
40 | extern void e_addhandler(lex_t*,const char*); | 44 | extern void e_addhandler(lex_t*,const char*); |
41 | extern void e_export_func(lex_t*, const char*); | 45 | extern void e_export_func(lex_t*, const char*); |
@@ -48,4 +52,5 @@ extern void e_proc_fakeroot(lex_t*, const char*, const char*); | |||
48 | extern void e_def(lex_t*, const char*, const char*, const char*); | 52 | extern void e_def(lex_t*, const char*, const char*, const char*); |
49 | extern void e_parse_error(lex_t*); | 53 | extern void e_parse_error(lex_t*); |
50 | 54 | ||
55 | } | ||
51 | #endif // PYTHON_OUTPUT_H | 56 | #endif // PYTHON_OUTPUT_H |
diff --git a/bitbake/lib/bb/parse/parse_py/BBHandler.py b/bitbake/lib/bb/parse/parse_py/BBHandler.py index 422ce6f9ef..c82090fec0 100644 --- a/bitbake/lib/bb/parse/parse_py/BBHandler.py +++ b/bitbake/lib/bb/parse/parse_py/BBHandler.py | |||
@@ -21,9 +21,9 @@ | |||
21 | this program; if not, write to the Free Software Foundation, Inc., 59 Temple | 21 | this program; if not, write to the Free Software Foundation, Inc., 59 Temple |
22 | Place, Suite 330, Boston, MA 02111-1307 USA.""" | 22 | Place, Suite 330, Boston, MA 02111-1307 USA.""" |
23 | 23 | ||
24 | import re, bb, os, sys | 24 | import re, bb, os, sys, time |
25 | import bb.fetch, bb.build, bb.utils | 25 | import bb.fetch, bb.build, bb.utils |
26 | from bb import debug, data, fetch, fatal | 26 | from bb import debug, data, fetch, fatal, methodpool |
27 | 27 | ||
28 | from ConfHandler import include, localpath, obtain, init | 28 | from ConfHandler import include, localpath, obtain, init |
29 | from bb.parse import ParseError | 29 | from bb.parse import ParseError |
@@ -44,6 +44,8 @@ __bbpath_found__ = 0 | |||
44 | __classname__ = "" | 44 | __classname__ = "" |
45 | classes = [ None, ] | 45 | classes = [ None, ] |
46 | 46 | ||
47 | __parsed_methods__ = methodpool.get_parsed_dict() | ||
48 | |||
47 | def supports(fn, d): | 49 | def supports(fn, d): |
48 | localfn = localpath(fn, d) | 50 | localfn = localpath(fn, d) |
49 | return localfn[-3:] == ".bb" or localfn[-8:] == ".bbclass" or localfn[-4:] == ".inc" | 51 | return localfn[-3:] == ".bb" or localfn[-8:] == ".bbclass" or localfn[-4:] == ".inc" |
@@ -78,6 +80,7 @@ def handle(fn, d, include = 0): | |||
78 | debug(2, "BB " + fn + ": handle(data, include)") | 80 | debug(2, "BB " + fn + ": handle(data, include)") |
79 | 81 | ||
80 | (root, ext) = os.path.splitext(os.path.basename(fn)) | 82 | (root, ext) = os.path.splitext(os.path.basename(fn)) |
83 | base_name = "%s%s" % (root,ext) | ||
81 | init(d) | 84 | init(d) |
82 | 85 | ||
83 | if ext == ".bbclass": | 86 | if ext == ".bbclass": |
@@ -126,10 +129,10 @@ def handle(fn, d, include = 0): | |||
126 | s = f.readline() | 129 | s = f.readline() |
127 | if not s: break | 130 | if not s: break |
128 | s = s.rstrip() | 131 | s = s.rstrip() |
129 | feeder(lineno, s, fn, d) | 132 | feeder(lineno, s, fn, base_name, d) |
130 | if __inpython__: | 133 | if __inpython__: |
131 | # add a blank line to close out any python definition | 134 | # add a blank line to close out any python definition |
132 | feeder(lineno + 1, "", fn, d) | 135 | feeder(lineno + 1, "", fn, base_name, d) |
133 | if ext == ".bbclass": | 136 | if ext == ".bbclass": |
134 | classes.remove(__classname__) | 137 | classes.remove(__classname__) |
135 | else: | 138 | else: |
@@ -156,9 +159,15 @@ def handle(fn, d, include = 0): | |||
156 | set_additional_vars(fn, d, include) | 159 | set_additional_vars(fn, d, include) |
157 | data.update_data(d) | 160 | data.update_data(d) |
158 | 161 | ||
162 | all_handlers = {} | ||
159 | for var in data.keys(d): | 163 | for var in data.keys(d): |
164 | # try to add the handler | ||
165 | # if we added it remember the choiche | ||
160 | if data.getVarFlag(var, 'handler', d): | 166 | if data.getVarFlag(var, 'handler', d): |
161 | bb.event.register(data.getVar(var, d)) | 167 | handler = data.getVar(var,d) |
168 | if bb.event.register(var,handler) == bb.event.Registered: | ||
169 | all_handlers[var] = handler | ||
170 | |||
162 | continue | 171 | continue |
163 | 172 | ||
164 | if not data.getVarFlag(var, 'task', d): | 173 | if not data.getVarFlag(var, 'task', d): |
@@ -172,12 +181,22 @@ def handle(fn, d, include = 0): | |||
172 | pdeps.append(var) | 181 | pdeps.append(var) |
173 | data.setVarFlag(p, 'deps', pdeps, d) | 182 | data.setVarFlag(p, 'deps', pdeps, d) |
174 | bb.build.add_task(p, pdeps, d) | 183 | bb.build.add_task(p, pdeps, d) |
184 | |||
185 | # now add the handlers | ||
186 | if not len(all_handlers) == 0: | ||
187 | data.setVar('__all_handlers__', all_handlers, d) | ||
188 | |||
175 | bbpath.pop(0) | 189 | bbpath.pop(0) |
176 | if oldfile: | 190 | if oldfile: |
177 | bb.data.setVar("FILE", oldfile, d) | 191 | bb.data.setVar("FILE", oldfile, d) |
192 | |||
193 | # we have parsed the bb class now | ||
194 | if ext == ".bbclass" or ext == ".inc": | ||
195 | __parsed_methods__[base_name] = 1 | ||
196 | |||
178 | return d | 197 | return d |
179 | 198 | ||
180 | def feeder(lineno, s, fn, d): | 199 | def feeder(lineno, s, fn, root, d): |
181 | global __func_start_regexp__, __inherit_regexp__, __export_func_regexp__, __addtask_regexp__, __addhandler_regexp__, __def_regexp__, __python_func_regexp__, __inpython__,__infunc__, __body__, __bbpath_found__, classes, bb, __residue__ | 200 | global __func_start_regexp__, __inherit_regexp__, __export_func_regexp__, __addtask_regexp__, __addhandler_regexp__, __def_regexp__, __python_func_regexp__, __inpython__,__infunc__, __body__, __bbpath_found__, classes, bb, __residue__ |
182 | if __infunc__: | 201 | if __infunc__: |
183 | if s == '}': | 202 | if s == '}': |
@@ -205,13 +224,22 @@ def feeder(lineno, s, fn, d): | |||
205 | __body__.append(s) | 224 | __body__.append(s) |
206 | return | 225 | return |
207 | else: | 226 | else: |
208 | text = '\n'.join(__body__) | 227 | # Note we will add root to parsedmethods after having parse |
209 | comp = bb.utils.better_compile(text, "<bb>", fn ) | 228 | # 'this' file. This means we will not parse methods from |
210 | bb.utils.better_exec(comp, __builtins__, text, fn) | 229 | # bb classes twice |
230 | if not root in __parsed_methods__: | ||
231 | text = '\n'.join(__body__) | ||
232 | methodpool.insert_method( root, text, fn ) | ||
233 | funcs = data.getVar('__functions__', d) or {} | ||
234 | if not funcs.has_key( root ): | ||
235 | funcs[root] = text | ||
236 | else: | ||
237 | funcs[root] = "%s\n%s" % (funcs[root], text) | ||
238 | |||
239 | data.setVar('__functions__', funcs, d) | ||
211 | __body__ = [] | 240 | __body__ = [] |
212 | __inpython__ = False | 241 | __inpython__ = False |
213 | funcs = data.getVar('__functions__', d) or "" | 242 | |
214 | data.setVar('__functions__', "%s\n%s" % (funcs, text), d) | ||
215 | # fall through | 243 | # fall through |
216 | 244 | ||
217 | if s == '' or s[0] == '#': return # skip comments and empty lines | 245 | if s == '' or s[0] == '#': return # skip comments and empty lines |
diff --git a/bitbake/lib/bb/shell.py b/bitbake/lib/bb/shell.py index b86dc9753c..93ad00d1ed 100644 --- a/bitbake/lib/bb/shell.py +++ b/bitbake/lib/bb/shell.py | |||
@@ -3,7 +3,8 @@ | |||
3 | # -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- | 3 | # -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- |
4 | ########################################################################## | 4 | ########################################################################## |
5 | # | 5 | # |
6 | # Copyright (C) 2005 Michael 'Mickey' Lauer <mickey@Vanille.de>, Vanille Media | 6 | # Copyright (C) 2005-2006 Michael 'Mickey' Lauer <mickey@Vanille.de> |
7 | # Copyright (C) 2005-2006 Vanille Media | ||
7 | # | 8 | # |
8 | # This program is free software; you can redistribute it and/or modify it under | 9 | # This program is free software; you can redistribute it and/or modify it under |
9 | # the terms of the GNU General Public License as published by the Free Software | 10 | # the terms of the GNU General Public License as published by the Free Software |
@@ -59,7 +60,7 @@ import sys, os, imp, readline, socket, httplib, urllib, commands, popen2, copy, | |||
59 | imp.load_source( "bitbake", os.path.dirname( sys.argv[0] )+"/bitbake" ) | 60 | imp.load_source( "bitbake", os.path.dirname( sys.argv[0] )+"/bitbake" ) |
60 | from bb import data, parse, build, fatal | 61 | from bb import data, parse, build, fatal |
61 | 62 | ||
62 | __version__ = "0.5.3" | 63 | __version__ = "0.5.3.1" |
63 | __credits__ = """BitBake Shell Version %s (C) 2005 Michael 'Mickey' Lauer <mickey@Vanille.de> | 64 | __credits__ = """BitBake Shell Version %s (C) 2005 Michael 'Mickey' Lauer <mickey@Vanille.de> |
64 | Type 'help' for more information, press CTRL-D to exit.""" % __version__ | 65 | Type 'help' for more information, press CTRL-D to exit.""" % __version__ |
65 | 66 | ||
@@ -263,9 +264,10 @@ class BitBakeShellCommands: | |||
263 | bbfile = params[0] | 264 | bbfile = params[0] |
264 | print "SHELL: Parsing '%s'" % bbfile | 265 | print "SHELL: Parsing '%s'" % bbfile |
265 | parse.update_mtime( bbfile ) | 266 | parse.update_mtime( bbfile ) |
266 | bb_data, fromCache = cooker.load_bbfile( bbfile ) | 267 | cooker.bb_cache.cacheValidUpdate(bbfile) |
267 | cooker.pkgdata[bbfile] = bb_data | 268 | fromCache = cooker.bb_cache.loadData(bbfile, cooker) |
268 | if fromCache: | 269 | cooker.bb_cache.sync() |
270 | if False: #from Cache | ||
269 | print "SHELL: File has not been updated, not reparsing" | 271 | print "SHELL: File has not been updated, not reparsing" |
270 | else: | 272 | else: |
271 | print "SHELL: Parsed" | 273 | print "SHELL: Parsed" |
@@ -307,7 +309,7 @@ class BitBakeShellCommands: | |||
307 | what, globexpr = params | 309 | what, globexpr = params |
308 | if what == "files": | 310 | if what == "files": |
309 | self._checkParsed() | 311 | self._checkParsed() |
310 | for key in globfilter( cooker.pkgdata.keys(), globexpr ): print key | 312 | for key in globfilter( cooker.status.pkg_fn.keys(), globexpr ): print key |
311 | elif what == "providers": | 313 | elif what == "providers": |
312 | self._checkParsed() | 314 | self._checkParsed() |
313 | for key in globfilter( cooker.status.pkg_pn.keys(), globexpr ): print key | 315 | for key in globfilter( cooker.status.pkg_pn.keys(), globexpr ): print key |
@@ -374,7 +376,7 @@ SRC_URI = "" | |||
374 | pasteBin.usage = "<index>" | 376 | pasteBin.usage = "<index>" |
375 | 377 | ||
376 | def pasteLog( self, params ): | 378 | def pasteLog( self, params ): |
377 | """Send the last event exception error log (if there is one) to http://pastebin.com""" | 379 | """Send the last event exception error log (if there is one) to http://oe.pastebin.com""" |
378 | if last_exception is None: | 380 | if last_exception is None: |
379 | print "SHELL: No Errors yet (Phew)..." | 381 | print "SHELL: No Errors yet (Phew)..." |
380 | else: | 382 | else: |
@@ -432,7 +434,8 @@ SRC_URI = "" | |||
432 | name, var = params | 434 | name, var = params |
433 | bbfile = self._findProvider( name ) | 435 | bbfile = self._findProvider( name ) |
434 | if bbfile is not None: | 436 | if bbfile is not None: |
435 | value = cooker.pkgdata[bbfile].getVar( var, 1 ) | 437 | the_data = cooker.bb_cache.loadDataFull(bbfile, cooker) |
438 | value = the_data.getVar( var, 1 ) | ||
436 | print value | 439 | print value |
437 | else: | 440 | else: |
438 | print "ERROR: Nothing provides '%s'" % name | 441 | print "ERROR: Nothing provides '%s'" % name |
@@ -442,13 +445,14 @@ SRC_URI = "" | |||
442 | """Set contents of variable defined in providee's metadata""" | 445 | """Set contents of variable defined in providee's metadata""" |
443 | name, var, value = params | 446 | name, var, value = params |
444 | bbfile = self._findProvider( name ) | 447 | bbfile = self._findProvider( name ) |
445 | d = cooker.pkgdata[bbfile] | ||
446 | if bbfile is not None: | 448 | if bbfile is not None: |
447 | data.setVar( var, value, d ) | 449 | print "ERROR: Sorry, this functionality is currently broken" |
450 | #d = cooker.pkgdata[bbfile] | ||
451 | #data.setVar( var, value, d ) | ||
448 | 452 | ||
449 | # mark the change semi persistant | 453 | # mark the change semi persistant |
450 | cooker.pkgdata.setDirty(bbfile, d) | 454 | #cooker.pkgdata.setDirty(bbfile, d) |
451 | print "OK" | 455 | #print "OK" |
452 | else: | 456 | else: |
453 | print "ERROR: Nothing provides '%s'" % name | 457 | print "ERROR: Nothing provides '%s'" % name |
454 | poke.usage = "<providee> <variable> <value>" | 458 | poke.usage = "<providee> <variable> <value>" |
@@ -458,7 +462,7 @@ SRC_URI = "" | |||
458 | what = params[0] | 462 | what = params[0] |
459 | if what == "files": | 463 | if what == "files": |
460 | self._checkParsed() | 464 | self._checkParsed() |
461 | for key in cooker.pkgdata.keys(): print key | 465 | for key in cooker.status.pkg_fn.keys(): print key |
462 | elif what == "providers": | 466 | elif what == "providers": |
463 | self._checkParsed() | 467 | self._checkParsed() |
464 | for key in cooker.status.providers.keys(): print key | 468 | for key in cooker.status.providers.keys(): print key |
@@ -555,14 +559,14 @@ SRC_URI = "" | |||
555 | 559 | ||
556 | def completeFilePath( bbfile ): | 560 | def completeFilePath( bbfile ): |
557 | """Get the complete bbfile path""" | 561 | """Get the complete bbfile path""" |
558 | if not cooker.pkgdata: return bbfile | 562 | if not cooker.status.pkg_fn: return bbfile |
559 | for key in cooker.pkgdata.keys(): | 563 | for key in cooker.status.pkg_fn.keys(): |
560 | if key.endswith( bbfile ): | 564 | if key.endswith( bbfile ): |
561 | return key | 565 | return key |
562 | return bbfile | 566 | return bbfile |
563 | 567 | ||
564 | def sendToPastebin( content ): | 568 | def sendToPastebin( content ): |
565 | """Send content to http://www.pastebin.com""" | 569 | """Send content to http://oe.pastebin.com""" |
566 | mydata = {} | 570 | mydata = {} |
567 | mydata["parent_pid"] = "" | 571 | mydata["parent_pid"] = "" |
568 | mydata["format"] = "bash" | 572 | mydata["format"] = "bash" |
@@ -572,7 +576,7 @@ def sendToPastebin( content ): | |||
572 | params = urllib.urlencode( mydata ) | 576 | params = urllib.urlencode( mydata ) |
573 | headers = {"Content-type": "application/x-www-form-urlencoded","Accept": "text/plain"} | 577 | headers = {"Content-type": "application/x-www-form-urlencoded","Accept": "text/plain"} |
574 | 578 | ||
575 | conn = httplib.HTTPConnection( "pastebin.com:80" ) | 579 | conn = httplib.HTTPConnection( "oe.pastebin.com:80" ) |
576 | conn.request("POST", "/", params, headers ) | 580 | conn.request("POST", "/", params, headers ) |
577 | 581 | ||
578 | response = conn.getresponse() | 582 | response = conn.getresponse() |
@@ -594,10 +598,10 @@ def completer( text, state ): | |||
594 | if u == "<variable>": | 598 | if u == "<variable>": |
595 | allmatches = cooker.configuration.data.keys() | 599 | allmatches = cooker.configuration.data.keys() |
596 | elif u == "<bbfile>": | 600 | elif u == "<bbfile>": |
597 | if cooker.pkgdata is None: allmatches = [ "(No Matches Available. Parsed yet?)" ] | 601 | if cooker.status.pkg_fn is None: allmatches = [ "(No Matches Available. Parsed yet?)" ] |
598 | else: allmatches = [ x.split("/")[-1] for x in cooker.pkgdata.keys() ] | 602 | else: allmatches = [ x.split("/")[-1] for x in cooker.status.pkg_fn.keys() ] |
599 | elif u == "<providee>": | 603 | elif u == "<providee>": |
600 | if cooker.pkgdata is None: allmatches = [ "(No Matches Available. Parsed yet?)" ] | 604 | if cooker.status.pkg_fn is None: allmatches = [ "(No Matches Available. Parsed yet?)" ] |
601 | else: allmatches = cooker.status.providers.iterkeys() | 605 | else: allmatches = cooker.status.providers.iterkeys() |
602 | else: allmatches = [ "(No tab completion available for this command)" ] | 606 | else: allmatches = [ "(No tab completion available for this command)" ] |
603 | else: allmatches = [ "(No tab completion available for this command)" ] | 607 | else: allmatches = [ "(No tab completion available for this command)" ] |