| Server IP : 217.160.0.212 / Your IP : 216.73.216.141 Web Server : Apache System : Linux www 6.18.51-i1-ampere #1196 SMP Fri Sep 11 20:43:55 CEST 2026 aarch64 User : sws1073854427 ( 1073854427) PHP Version : 8.4.23 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /lib/python3/dist-packages/pythran/analyses/ |
Upload File : |
""" Immediates gathers immediates. For now, only integers within shape are
considered as immediates """
import gast as ast
from pythran.tables import MODULES
from pythran.analyses import Aliases
from pythran.passmanager import NodeAnalysis
from pythran.utils import pythran_builtin, isnum
_make_shape = pythran_builtin('make_shape')
class Immediates(NodeAnalysis):
def __init__(self):
self.result = set()
super(Immediates, self).__init__(Aliases)
def visit_Call(self, node):
func_aliases = self.aliases[node.func]
for alias in func_aliases:
if getattr(alias, "immediate_arguments", []):
for i, arg in enumerate(node.args):
if i in alias.immediate_arguments:
if isinstance(arg, ast.Constant):
self.result.add(arg)
if len(func_aliases) == 1 and next(iter(func_aliases)) is _make_shape:
self.result.update(a for a in node.args
if isnum(a)
and isinstance(a.value, int)
and a.value >= 0)
return
return self.generic_visit(node)