def parse_stage_input(node: ast.ClassDef, stages: str) -> pysl.StageInput:
si = pysl.StageInput()
si.set_location(node)
si.name = node.name
si.elements = []
si.stages = stages
conditions = []
for decl_node in node.body:
if isinstance(decl_node, ast.AnnAssign):
assignment = parse_assignment(decl_node)
element = pysl.InputElement()
element.set_location(decl_node)
element.name = assignment.name
element.type = str_to_pysl_type(loc(decl_node), assignment.type)
element.semantic = assignment.value
element.conditions = list(conditions)
conditions[:] = [] # Copy
si.elements.append(element)
elif (isinstance(decl_node, ast.Expr) and
isinstance(decl_node.value, ast.Call)):
if decl_node.value.func.id is '_':
conditions.append(parse_preprocessor(decl_node.value))
else:
error(loc(decl_node), "Unsupported function call: {0} inside StageInput: {1}".format(decl_node.value.func.id, si.name))
else:
error(loc(decl_node), "Unrecognized node inside StageInput: {0}".format(si.name))
si.post_conditions = list(conditions)
return si
评论列表
文章目录