def _add_defined_attributes(self, ast): defines = compress_seq(self.defines()) if not isinstance(ast, (AST, Node)): return for d, l in defines: if not hasattr(ast, d): setattr(ast, d, [] if l else None)
def _parse_rhs(self, ctx, exp): ruleinfo = RuleInfo(self.name, exp.parse, self.params, self.kwparams) result = ctx._call(ruleinfo) if isinstance(result, AST): defines = compress_seq(self.defines()) result._define([d for d, l in defines if not l], [d for d, l in defines if l]) return result
def _parse_rhs(self, ctx, exp): ruleinfo = RuleInfo(self.name, exp.parse, self.params, self.kwparams) result = ctx._call(ruleinfo) if isinstance(result, AST): defines = compress_seq(self.defines()) result._define( [d for d, l in defines if not l], [d for d, l in defines if l] ) return result
def _add_defined_attributes(self, ctx, ast=None): if ast is None: return if not hasattr(ast, '_define'): return defines = dict(compress_seq(self.defines())) keys = [k for k, list in defines.items() if not list] list_keys = [k for k, list in defines.items() if list] ctx._define(keys, list_keys) ast._define(keys, list_keys)
def render_fields(self, fields): self.reset_counter() params = kwparams = '' if self.node.params: params = ', '.join( self.param_repr(self.rend(p)) for p in self.node.params ) if self.node.kwparams: kwparams = ', '.join( '%s=%s' % (k, self.param_repr(self.rend(v))) for k, v in self.kwparams.items() ) if params and kwparams: params = params + ', ' + kwparams elif kwparams: params = kwparams fields.update(params=params) defines = compress_seq(self.defines()) ldefs = set(safe_name(d) for d, l in defines if l) sdefs = set(safe_name(d) for d, l in defines if not l and d not in ldefs) if not (sdefs or ldefs): sdefines = '' else: sdefs = '[%s]' % ', '.join(urepr(d) for d in sorted(sdefs)) ldefs = '[%s]' % ', '.join(urepr(d) for d in sorted(ldefs)) if not ldefs: sdefines = '\n\n self.ast._define(%s, %s)' % (sdefs, ldefs) else: sdefines = indent( '\n' + trim(self.define_template % (sdefs, ldefs)) ) fields.update(defines=sdefines) fields.update( check_name='\n self._check_name()' if self.is_name else '', ) leftrec = self.node.is_leftrec fields.update(leftrec='\n@leftrec' if leftrec else '') fields.update(nomemo='\n@nomemo' if not self.node.is_memoizable and not leftrec else '')
def render_fields(self, fields): defs = [safe_name(d) for d, l in compress_seq(self.defines())] defs = list(sorted(set(defs))) spec = fields["spec"] kwargs = '\n'.join('%s = None' % d for d in defs) if kwargs: kwargs = indent(kwargs) else: kwargs = indent('pass') fields.update( class_name=spec.class_name, base=spec.base, kwargs=kwargs, )
def make_defines_declaration(self): defines = compress_seq(self.defines()) ldefs = oset(safe_name(d) for d, l in defines if l) sdefs = oset( safe_name(d) for d, l in defines if not l and d not in ldefs) if not (sdefs or ldefs): return '' else: sdefs = '[%s]' % ', '.join(sorted(repr(d) for d in sdefs)) ldefs = '[%s]' % ', '.join(sorted(repr(d) for d in ldefs)) if not ldefs: return '\n\n self._define(%s, %s)' % (sdefs, ldefs) else: return indent('\n' + trim(self.define_template % (sdefs, ldefs)))
def render_fields(self, fields): defs = [safe_name(d) for d, l in compress_seq(self.defines())] defs = list(sorted(set(defs))) kwargs = '\n'.join('%s = None' % d for d in defs) if kwargs: kwargs = indent(kwargs) else: kwargs = indent('pass') spec = _typespec(self.node) fields.update( class_name=spec.class_name, base=spec.base, kwargs=kwargs, )