Пример #1
0
    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
Пример #2
0
 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
Пример #3
0
    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
Пример #4
0
    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