source: proto/Compiler/mkast.py @ 3128

Last change on this file since 3128 was 3017, checked in by cameron, 6 years ago

Factor out AST helpers to mkast.py

File size: 2.0 KB
Line 
1#
2# mkast.py
3#
4# Helpers for making Python AST objects
5#
6# Robert D. Cameron
7# April 13, 2013
8# Licensed under Open Software License 3.0
9#
10import ast
11
12#
13# Helper functions
14#
15def TestHelper_Bitblock_Or(testExpr, bitBlockExpr):
16    if isinstance(testExpr, ast.Call):
17      assert isinstance(testExpr.func, ast.Name)
18      assert testExpr.func.id == 'bitblock::any'
19      testExpr.args[0] = call('simd_or', [bitBlockExpr, testExpr.args[0]])
20      return testExpr
21    else:
22      return ast.BinOp(testExpr, ast.BitOr(), call('bitblock::any', [bitBlockExpr]))
23
24def TestHelper_Integer_Or(testExpr, intExpr):
25    return ast.BinOp(testExpr, ast.BitOr(), intExpr)
26
27def var(v, mode=ast.Load()):
28  if isinstance(v, str): 
29        v = ast.Name(v, mode)
30  return v
31 
32def assign(var, expr):
33   if isinstance(var, str): 
34        var = ast.Name(var, ast.Store())
35   return ast.Assign([var], expr)
36
37def index(var, num, mode=ast.Load()):
38  if isinstance(var, str): 
39        var = ast.Name(var, ast.Load())
40  return ast.Subscript(var, ast.Index(ast.Num(num)), mode)
41
42def index_store(var, num):
43  if isinstance(var, str): 
44        var = ast.Name(var, ast.Load())
45  return ast.Subscript(var, ast.Index(ast.Num(num)), ast.Store())
46
47def att(var, att, mode=ast.Load()):
48  if isinstance(var, str): 
49        var = ast.Name(var, ast.Load())
50  return ast.Attribute(var, att, mode)
51
52def att_store(var, att):
53  if isinstance(var, str): 
54        var = ast.Name(var, ast.Load())
55  return ast.Attribute(var, att, ast.Store())
56
57def call(fn_name, args):
58  if isinstance(fn_name, str): 
59        fn_name = ast.Name(fn_name, ast.Load())
60  return ast.Call(fn_name, args, [], None, None)
61
62def callStmt(fn_name, args):
63  if isinstance(fn_name, str): fn_name = ast.Name(fn_name, ast.Load())
64  return ast.Expr(ast.Call(fn_name, args, [], None, None))
65
66def mergeh(fw, x, y):
67  return call("esimd<%i>::mergeh" % fw, [var(x), var(y)])
68
69def zero(fw):
70  return call("simd<%i>::constant<0>" % fw, [])
71
72def Qname(obj, field):
73  return ast.Attribute(ast.Name(obj, ast.Load()), field, ast.Load())
74
75
Note: See TracBrowser for help on using the repository browser.