def visit_expression(self, expr): expr = super().visit_expression(expr) if isinstance(expr, exprs.UnresolvedCallExpression) and isinstance( expr.func, exprs.PropertyAccessExpression): return exprs.UnresolvedMethodCallExpression( expr.func.object, expr.func.property_name, expr.type_args, expr.args) return expr
def transform(self, expr): # TODO: convert ElementAccess to ElementGet and ElementSet expressions if isinstance(expr, exprs.BinaryExpression) and isinstance( expr.left, exprs.ElementAccessExpression): expr.left.object = self.main.run_plugins_on(expr.left.object) if self.is_map_or_array_type(expr.left.object.get_type()): #const right = expr.operator === "=" ? expr.right : new BinaryExpression(<Expression>expr.left.clone(), expr.operator === "+=" ? "+" : "-", expr.right); return exprs.UnresolvedMethodCallExpression( expr.left.object, "set", [], [expr.left.element_expr, expr.right]) elif isinstance(expr, exprs.ElementAccessExpression): expr.object = self.main.run_plugins_on(expr.object) if self.is_map_or_array_type(expr.object.get_type()): return exprs.UnresolvedMethodCallExpression( expr.object, "get", [], [expr.element_expr]) elif isinstance(expr.element_expr, exprs.StringLiteral): return exprs.PropertyAccessExpression( expr.object, expr.element_expr.string_value) return expr