예제 #1
0
        def _render_pre(self):
            result = [
                self.env_expr.render_pre(),
                self.key_expr.render_pre(),
                self.lookup_kind_expr.render_pre(),
                self.categories.render_pre()
            ]
            args = [('Self', self.env_expr.render_expr()),
                    ('Key', self.key_expr.render_expr()),
                    ('Lookup_Kind', 'To_Lookup_Kind_Type ({})'.format(
                        self.lookup_kind_expr.render_expr())),
                    ('Categories', self.categories.render_expr())]

            # Pass the From parameter if the user wants sequential semantics
            if self.sequential_from:
                result.append(self.sequential_from.render_pre())
                args.append(('From', self.sequential_from.render_expr()))

            if self.only_first:
                result_expr = 'AST_Envs.Get_First ({})'.format(', '.join(
                    '{} => {}'.format(n, v) for n, v in args))
            else:
                result_expr = (
                    'Construct_Entity_Array (AST_Envs.Get ({}))'.format(
                        ', '.join('{} => {}'.format(n, v) for n, v in args)))

            # In both cases above, the expression is going to be a function
            # call that returns a new ownership share, so there is no need for
            # an inc-ref for the storage in the result variable.
            result.append(
                assign_var(self.result_var.ref_expr,
                           result_expr,
                           requires_incref=False))

            return '\n'.join(result)
예제 #2
0
 def _render_pre(self):
     target = ('{}.Node' if self.expr.type.is_entity_type else
               '{}').format(self.expr.render_expr())
     result_expr = (
         '{target} /= null \nand then {target}.all in {nodes}'.format(
             target=target,
             nodes=' | '.join(
                 "{}_Type'Class".format(a.name.camel_with_underscores)
                 for a in self.astnodes)))
     return '{}\n{}'.format(
         self.expr.render_pre(),
         assign_var(self.result_var.ref_expr, result_expr))
예제 #3
0
 def _render_pre(self):
     target = T.root_node.internal_conversion(
         self.expr.type,
         ('{}.Node' if self.expr.type.is_entity_type else '{}').format(
             self.expr.render_expr()))
     result_expr = (
         '{target} /= null \nand then {target}.Kind in {nodes}'.format(
             target=target,
             nodes=' | '.join(a.ada_kind_range_name
                              for a in self.astnodes)))
     return '{}\n{}'.format(
         self.expr.render_pre(),
         assign_var(self.result_var.ref_expr, result_expr))
예제 #4
0
        def _render_pre(self):
            record_expr = '({})'.format(', '.join(
                '{} => {}'.format(name.camel_with_underscores,
                                  expr.render_expr())
                for name, expr in self._iter_ordered()))

            return '{}\n{}'.format(
                self._render_fields(),

                # We must not inc-ref the resulting record as we already
                # inc-ref'd manually all the ref-counted members.
                assign_var(self.result_var.ref_expr,
                           record_expr,
                           requires_incref=False))