Cerebro’s supported control flow¶
Conditionals¶
Cerebro currently supports basic conditionals and assignment operators under those conditionals. It transforms such assignment operators into a compound statement that erases the use of conditionals.
For example, if we have the following conditional:
if cond:
x = 5
else:
x = 10
Then, Cerebro transforms it into:
x = cond * 5 + (1-cond) * 10
- Limitations:
Condition can only have a single conditional operator.
Currently, only assignment operators are supported in the body of the conditional.
For-Loops¶
Currently, Cerebro uses the SCALE-MAMBA @for_range construct when using for-loops. No extra work needs to be done on the developer’s end, one can just write:
for i in range(n)
and have that code be transformed into a representation the underlying framework understands.
- Limitations: (which can be resolved by unrolling the loop)
Assignments to variables outside the for-loop scope cannot be made.
Loop-Unrolling¶
Loop unrolling is currently a work-in progress, but it allows code within a for-loop to be unrolled into a series of assignment statements and function calls.
After enabling loop unrolling, the following example code:
x = 0
for i in range(2):
x += i
would be transformed into:
x = 0
i = 0
x += i
i = 1
x += i
It allows more flexibility in what to code in for-loops for the developer.
Function Inlining¶
Function inlining is also a work in progress. It replaces function calls with the entire inlined version of the function call. For example, if we have the following code:
def f(y):
x = 5
print("Hello")
return x + y
def g(x):
return f(x)
g(3)
After function inlining, it would be transformed into:
g_x = 3
f_y = 3
f_x = 5
print("Hello")
f_ret = f_x + f_y
g_ret = f_ret
- Limitations:
Currently function inlining is a bit wonky dealing with OOP.