From 9c5eecbe4f21bdeb999605b7e205690e988837eb Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 31 Jan 2016 18:55:29 +0000 Subject: Rename PrimitiveMethods to PythonPrimitiveMethods in C# backend --- .../couscous/backends/python/PrimitiveMethods.java | 152 --------------------- .../backends/python/PythonCodeGenerator.java | 4 +- .../backends/python/PythonPrimitiveMethods.java | 152 +++++++++++++++++++++ 3 files changed, 154 insertions(+), 154 deletions(-) delete mode 100644 src/main/java/org/zwobble/couscous/backends/python/PrimitiveMethods.java create mode 100644 src/main/java/org/zwobble/couscous/backends/python/PythonPrimitiveMethods.java (limited to 'src/main/java/org') diff --git a/src/main/java/org/zwobble/couscous/backends/python/PrimitiveMethods.java b/src/main/java/org/zwobble/couscous/backends/python/PrimitiveMethods.java deleted file mode 100644 index b62048f..0000000 --- a/src/main/java/org/zwobble/couscous/backends/python/PrimitiveMethods.java +++ /dev/null @@ -1,152 +0,0 @@ -package org.zwobble.couscous.backends.python; - -import com.google.common.collect.ImmutableMap; -import com.google.common.collect.ImmutableMap.Builder; -import org.zwobble.couscous.ast.Operator; -import org.zwobble.couscous.ast.TypeName; -import org.zwobble.couscous.backends.python.ast.PythonBinaryOperation; -import org.zwobble.couscous.backends.python.ast.PythonExpressionNode; -import org.zwobble.couscous.backends.python.ast.PythonNotNode; -import org.zwobble.couscous.values.*; - -import java.util.List; -import java.util.Map; -import java.util.Optional; -import java.util.function.BiFunction; - -import static org.zwobble.couscous.backends.python.ast.PythonAttributeAccessNode.pythonAttributeAccess; -import static org.zwobble.couscous.backends.python.ast.PythonBinaryOperation.pythonIs; -import static org.zwobble.couscous.backends.python.ast.PythonCallNode.pythonCall; -import static org.zwobble.couscous.backends.python.ast.PythonGetSliceNode.pythonGetSlice; -import static org.zwobble.couscous.backends.python.ast.PythonVariableReferenceNode.pythonVariableReference; -import static org.zwobble.couscous.util.ExtraLists.list; - -public class PrimitiveMethods { - private static final Map STRING_METHODS = - ImmutableMap.builder() - - .put("length", (receiver, arguments) -> - pythonCall( - pythonVariableReference("len"), - list(receiver))) - - .put("substring", (receiver, arguments) -> - pythonGetSlice(receiver, arguments)) - - .put(Operator.ADD.getSymbol(), (receiver, arguments) -> - PythonBinaryOperation.pythonAdd(receiver, arguments.get(0))) - - .put("toLowerCase", (receiver, arguments) -> - pythonCall(pythonAttributeAccess(receiver, "lower"), list())) - - .put("equals", (receiver, arguments) -> - PythonBinaryOperation.pythonEqual(receiver, arguments.get(0))) - - .build(); - - private static final Map BOOLEAN_METHODS; - - static { - ImmutableMap.Builder methods = ImmutableMap.builder(); - - methods.put(Operator.BOOLEAN_NOT.getSymbol(), (receiver, arguments) -> - PythonNotNode.pythonNot(receiver)); - - addOperation(methods, Operator.BOOLEAN_AND, PythonBinaryOperation::pythonAnd); - addOperation(methods, Operator.BOOLEAN_OR, PythonBinaryOperation::pythonOr); - - BOOLEAN_METHODS = methods.build(); - } - - private static final Map INT_METHODS; - - static { - ImmutableMap.Builder methods = ImmutableMap.builder(); - - methods.put("toString", (receiver, arguments) -> - pythonCall(pythonVariableReference("str"), list(receiver))); - - addOperation(methods, Operator.ADD, PythonBinaryOperation::pythonAdd); - addOperation(methods, Operator.SUBTRACT, PythonBinaryOperation::pythonSubtract); - addOperation(methods, Operator.MULTIPLY, PythonBinaryOperation::pythonMultiply); - - methods.put(Operator.DIVIDE.getSymbol(), (receiver, arguments) -> - pythonCall( - internalReference("_div_round_to_zero"), - list(receiver, arguments.get(0)))); - methods.put(Operator.MOD.getSymbol(), (receiver, arguments) -> - pythonCall( - internalReference("_mod_round_to_zero"), - list(receiver, arguments.get(0)))); - - addOperation(methods, Operator.EQUALS, PythonBinaryOperation::pythonEqual); - addOperation(methods, Operator.NOT_EQUALS, PythonBinaryOperation::pythonNotEqual); - addOperation(methods, Operator.GREATER_THAN, PythonBinaryOperation::pythonGreaterThan); - addOperation(methods, Operator.GREATER_THAN_OR_EQUAL, PythonBinaryOperation::pythonGreatThanOrEqual); - addOperation(methods, Operator.LESS_THAN, PythonBinaryOperation::pythonLessThan); - addOperation(methods, Operator.LESS_THAN_OR_EQUAL, PythonBinaryOperation::pythonLessThanOrEqual); - - INT_METHODS = methods.build(); - } - - private static PythonExpressionNode internalReference(String name) { - return pythonAttributeAccess(pythonVariableReference("_couscous"), name); - } - - private static void addOperation( - Builder methods, - Operator operator, - BiFunction build) - { - addOperation(methods, operator.getSymbol(), build); - } - - private static void addOperation( - Builder methods, - String methodName, - BiFunction build) - { - methods.put(methodName, (receiver, arguments) -> - build.apply(receiver, arguments.get(0))); - } - - private static final Map> METHODS = - ImmutableMap.>builder() - .put(StringValue.REF, STRING_METHODS) - .put(BooleanValue.REF, BOOLEAN_METHODS) - .put(IntegerValue.REF, INT_METHODS) - .put(ObjectValues.BOXED_INT, INT_METHODS) - .build(); - - private static final Map INTERNAL_METHODS = - ImmutableMap.builder() - - .put("same", arguments -> pythonIs(arguments.get(0), arguments.get(1))) - - .build(); - - private static final Map> STATIC_METHODS = - ImmutableMap.>builder() - .put(InternalCouscousValue.REF, INTERNAL_METHODS) - .build(); - - public static Optional getPrimitiveMethod(TypeName type, String methodName) { - return Optional.ofNullable(METHODS.get(type)) - .flatMap(methodsForType -> Optional.ofNullable(methodsForType.get(methodName))); - } - - @FunctionalInterface - public interface PrimitiveMethodGenerator { - PythonExpressionNode generate(PythonExpressionNode receiver, List arguments); - } - - public static Optional getPrimitiveStaticMethod(TypeName type, String methodName) { - return Optional.ofNullable(STATIC_METHODS.get(type)) - .flatMap(methodsForType -> Optional.ofNullable(methodsForType.get(methodName))); - } - - @FunctionalInterface - public interface PrimitiveStaticMethodGenerator { - PythonExpressionNode generate(List arguments); - } -} diff --git a/src/main/java/org/zwobble/couscous/backends/python/PythonCodeGenerator.java b/src/main/java/org/zwobble/couscous/backends/python/PythonCodeGenerator.java index 964c5f9..086b3a0 100644 --- a/src/main/java/org/zwobble/couscous/backends/python/PythonCodeGenerator.java +++ b/src/main/java/org/zwobble/couscous/backends/python/PythonCodeGenerator.java @@ -263,13 +263,13 @@ public class PythonCodeGenerator { return methodCall.getReceiver().accept(new Receiver.Mapper>() { @Override public Optional visit(ExpressionNode receiver) { - return PrimitiveMethods.getPrimitiveMethod(receiver.getType(), methodCall.getMethodName()) + return PythonPrimitiveMethods.getPrimitiveMethod(receiver.getType(), methodCall.getMethodName()) .map(generator -> generator.generate(pythonReceiver, pythonArguments)); } @Override public Optional visit(TypeName receiver) { - return PrimitiveMethods.getPrimitiveStaticMethod(receiver, methodCall.getMethodName()) + return PythonPrimitiveMethods.getPrimitiveStaticMethod(receiver, methodCall.getMethodName()) .map(generator -> generator.generate(pythonArguments)); } }); diff --git a/src/main/java/org/zwobble/couscous/backends/python/PythonPrimitiveMethods.java b/src/main/java/org/zwobble/couscous/backends/python/PythonPrimitiveMethods.java new file mode 100644 index 0000000..6d6db82 --- /dev/null +++ b/src/main/java/org/zwobble/couscous/backends/python/PythonPrimitiveMethods.java @@ -0,0 +1,152 @@ +package org.zwobble.couscous.backends.python; + +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableMap.Builder; +import org.zwobble.couscous.ast.Operator; +import org.zwobble.couscous.ast.TypeName; +import org.zwobble.couscous.backends.python.ast.PythonBinaryOperation; +import org.zwobble.couscous.backends.python.ast.PythonExpressionNode; +import org.zwobble.couscous.backends.python.ast.PythonNotNode; +import org.zwobble.couscous.values.*; + +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.function.BiFunction; + +import static org.zwobble.couscous.backends.python.ast.PythonAttributeAccessNode.pythonAttributeAccess; +import static org.zwobble.couscous.backends.python.ast.PythonBinaryOperation.pythonIs; +import static org.zwobble.couscous.backends.python.ast.PythonCallNode.pythonCall; +import static org.zwobble.couscous.backends.python.ast.PythonGetSliceNode.pythonGetSlice; +import static org.zwobble.couscous.backends.python.ast.PythonVariableReferenceNode.pythonVariableReference; +import static org.zwobble.couscous.util.ExtraLists.list; + +public class PythonPrimitiveMethods { + private static final Map STRING_METHODS = + ImmutableMap.builder() + + .put("length", (receiver, arguments) -> + pythonCall( + pythonVariableReference("len"), + list(receiver))) + + .put("substring", (receiver, arguments) -> + pythonGetSlice(receiver, arguments)) + + .put(Operator.ADD.getSymbol(), (receiver, arguments) -> + PythonBinaryOperation.pythonAdd(receiver, arguments.get(0))) + + .put("toLowerCase", (receiver, arguments) -> + pythonCall(pythonAttributeAccess(receiver, "lower"), list())) + + .put("equals", (receiver, arguments) -> + PythonBinaryOperation.pythonEqual(receiver, arguments.get(0))) + + .build(); + + private static final Map BOOLEAN_METHODS; + + static { + ImmutableMap.Builder methods = ImmutableMap.builder(); + + methods.put(Operator.BOOLEAN_NOT.getSymbol(), (receiver, arguments) -> + PythonNotNode.pythonNot(receiver)); + + addOperation(methods, Operator.BOOLEAN_AND, PythonBinaryOperation::pythonAnd); + addOperation(methods, Operator.BOOLEAN_OR, PythonBinaryOperation::pythonOr); + + BOOLEAN_METHODS = methods.build(); + } + + private static final Map INT_METHODS; + + static { + ImmutableMap.Builder methods = ImmutableMap.builder(); + + methods.put("toString", (receiver, arguments) -> + pythonCall(pythonVariableReference("str"), list(receiver))); + + addOperation(methods, Operator.ADD, PythonBinaryOperation::pythonAdd); + addOperation(methods, Operator.SUBTRACT, PythonBinaryOperation::pythonSubtract); + addOperation(methods, Operator.MULTIPLY, PythonBinaryOperation::pythonMultiply); + + methods.put(Operator.DIVIDE.getSymbol(), (receiver, arguments) -> + pythonCall( + internalReference("_div_round_to_zero"), + list(receiver, arguments.get(0)))); + methods.put(Operator.MOD.getSymbol(), (receiver, arguments) -> + pythonCall( + internalReference("_mod_round_to_zero"), + list(receiver, arguments.get(0)))); + + addOperation(methods, Operator.EQUALS, PythonBinaryOperation::pythonEqual); + addOperation(methods, Operator.NOT_EQUALS, PythonBinaryOperation::pythonNotEqual); + addOperation(methods, Operator.GREATER_THAN, PythonBinaryOperation::pythonGreaterThan); + addOperation(methods, Operator.GREATER_THAN_OR_EQUAL, PythonBinaryOperation::pythonGreatThanOrEqual); + addOperation(methods, Operator.LESS_THAN, PythonBinaryOperation::pythonLessThan); + addOperation(methods, Operator.LESS_THAN_OR_EQUAL, PythonBinaryOperation::pythonLessThanOrEqual); + + INT_METHODS = methods.build(); + } + + private static PythonExpressionNode internalReference(String name) { + return pythonAttributeAccess(pythonVariableReference("_couscous"), name); + } + + private static void addOperation( + Builder methods, + Operator operator, + BiFunction build) + { + addOperation(methods, operator.getSymbol(), build); + } + + private static void addOperation( + Builder methods, + String methodName, + BiFunction build) + { + methods.put(methodName, (receiver, arguments) -> + build.apply(receiver, arguments.get(0))); + } + + private static final Map> METHODS = + ImmutableMap.>builder() + .put(StringValue.REF, STRING_METHODS) + .put(BooleanValue.REF, BOOLEAN_METHODS) + .put(IntegerValue.REF, INT_METHODS) + .put(ObjectValues.BOXED_INT, INT_METHODS) + .build(); + + private static final Map INTERNAL_METHODS = + ImmutableMap.builder() + + .put("same", arguments -> pythonIs(arguments.get(0), arguments.get(1))) + + .build(); + + private static final Map> STATIC_METHODS = + ImmutableMap.>builder() + .put(InternalCouscousValue.REF, INTERNAL_METHODS) + .build(); + + public static Optional getPrimitiveMethod(TypeName type, String methodName) { + return Optional.ofNullable(METHODS.get(type)) + .flatMap(methodsForType -> Optional.ofNullable(methodsForType.get(methodName))); + } + + @FunctionalInterface + public interface PrimitiveMethodGenerator { + PythonExpressionNode generate(PythonExpressionNode receiver, List arguments); + } + + public static Optional getPrimitiveStaticMethod(TypeName type, String methodName) { + return Optional.ofNullable(STATIC_METHODS.get(type)) + .flatMap(methodsForType -> Optional.ofNullable(methodsForType.get(methodName))); + } + + @FunctionalInterface + public interface PrimitiveStaticMethodGenerator { + PythonExpressionNode generate(List arguments); + } +} -- cgit v1.2.3