def assign_location(target: Expression, source: Expression): # set statement target.statement = source.statement # set parents target.parent = source.parent target.annotated_type.parent = target source.parent = target # set source location target.line = source.line target.column = source.column
def implicitly_converted_to(expr: Expression, t: TypeName) -> Expression: assert expr.annotated_type.type_name.is_primitive_type() cast = PrimitiveCastExpr(t.clone(), expr, is_implicit=True).override( parent=expr.parent, statement=expr.statement, line=expr.line, column=expr.column) cast.elem_type.parent = cast expr.parent = cast cast.annotated_type = AnnotatedTypeName( t.clone(), expr.annotated_type.privacy_annotation.clone()).override( parent=cast) return cast
def implicitly_converted_to(expr: Expression, t: TypeName) -> Expression: if isinstance(expr, ReclassifyExpr) and not expr.privacy.is_all_expr(): # Cast the argument of the ReclassifyExpr instead expr.expr = TypeCheckVisitor.implicitly_converted_to(expr.expr, t) expr.annotated_type.type_name = expr.expr.annotated_type.type_name return expr assert expr.annotated_type.type_name.is_primitive_type() cast = PrimitiveCastExpr(t.clone(), expr, is_implicit=True).override( parent=expr.parent, statement=expr.statement, line=expr.line, column=expr.column) cast.elem_type.parent = cast expr.parent = cast cast.annotated_type = AnnotatedTypeName( t.clone(), expr.annotated_type.privacy_annotation.clone(), expr.annotated_type.homomorphism).override(parent=cast) return cast
def make_private(expr: Expression, privacy: Expression): assert (privacy.privacy_annotation_label() is not None) pl = get_privacy_expr_from_label(privacy.privacy_annotation_label()) r = ReclassifyExpr(expr, pl) # set type r.annotated_type = AnnotatedTypeName(expr.annotated_type.type_name, pl.clone()) TypeCheckVisitor.check_for_invalid_private_type(r) # set statement r.statement = expr.statement # set parents r.parent = expr.parent r.annotated_type.parent = r expr.parent = r # set source location r.line = expr.line r.column = expr.column return r