def visit_For(self, node):
if isinstance(node.target, _ast.Name):
target = node.target.id
if isinstance(node.iter, _ast.Call) and isinstance(node.iter.func, _ast.Name):
if node.iter.func.id == "range":
return self.for_range(node, target)
else:
raise SyntaxError("GPUMAP: Only for ... in range(...) is supported!")
elif isinstance(node.iter, _ast.Name):
if node.iter.id in self.local_vars:
var_type = self.local_vars[node.iter.id]
if isinstance(var_type, str) and var_type.startswith("List<"):
list_type = var_type[var_type.find("<") + 1: var_type.rfind(">")]
return self.for_list(node, list_type, target)
elif isinstance(var_type, str) and var_type.startswith("List_Ptr<"):
list_type = var_type[var_type.find("<") + 1: var_type.rfind(">")]
return self.for_list(node, list_type, target, ptr=True)
else:
raise SyntaxError("GPUMAP: cannot iterate over a non-list type")
else:
raise SyntaxError("GPUMAP: no such variable found: " + node.iter.id)
else:
raise SyntaxError("GPUMAP: Only one variable can be assigned in a for loop!")
评论列表
文章目录