diff --git a/src/main/java/com/ardublock/translator/block/cast/CastItoa.java b/src/main/java/com/ardublock/translator/block/cast/CastItoa.java index 09ef7e23e9a5ab2151ce6ec5dd63e47cf23395f6..9da5d6312a1625d3e1080f2f5157ea2155fecdff 100644 --- a/src/main/java/com/ardublock/translator/block/cast/CastItoa.java +++ b/src/main/java/com/ardublock/translator/block/cast/CastItoa.java @@ -1,12 +1,20 @@ package com.ardublock.translator.block.cast; +import java.util.ResourceBundle; + import com.ardublock.translator.Translator; import com.ardublock.translator.block.TranslatorBlock; +import com.ardublock.translator.block.exception.BlockException; import com.ardublock.translator.block.exception.SocketNullException; import com.ardublock.translator.block.exception.SubroutineNotDeclaredException; +import com.ardublock.translator.block.numbers.ConstantStringBlock; +import com.ardublock.translator.block.numbers.LocalVariableStringBlock; +import com.ardublock.translator.block.numbers.VariableStringBlock; public class CastItoa extends TranslatorBlock { + private static ResourceBundle uiMessageBundle = ResourceBundle.getBundle("com/ardublock/block/ardublock"); + public CastItoa(Long blockId, Translator translator, String codePrefix, String codeSuffix, String label) { super(blockId, translator, codePrefix, codeSuffix, label); } @@ -14,10 +22,17 @@ public class CastItoa extends TranslatorBlock @Override public String toCode() throws SocketNullException, SubroutineNotDeclaredException { - TranslatorBlock tb = this.getRequiredTranslatorBlockAtSocket(0); - String intValue = tb.toCode().replaceAll("\\s*_.new\\b\\s*", ""); + TranslatorBlock tb_value = this.getRequiredTranslatorBlockAtSocket(0); + TranslatorBlock tb_buffer = this.getRequiredTranslatorBlockAtSocket(1); + + String intValue = tb_value.toCode().replaceAll("\\s*_.new\\b\\s*", ""); + String charBuffer = tb_buffer.toCode().replaceAll("\\s*_.new\\b\\s*", ""); + + if (!(tb_buffer instanceof VariableStringBlock) && !(tb_buffer instanceof LocalVariableStringBlock) && !(tb_buffer instanceof ConstantStringBlock)) { + throw new BlockException(blockId, uiMessageBundle.getString("ardublock.error_msg.string_var_slot")); + } - return "itoa("+ intValue + ")"; + return "itoa("+ intValue + ", " + charBuffer + ", 10)"; } } diff --git a/src/main/resources/com/ardublock/block/ardublock.xml b/src/main/resources/com/ardublock/block/ardublock.xml index 655c86f9d2f201a87854b80385e708ce422303c0..116c230924ea866860d29240e2a2dd55f213da58 100644 --- a/src/main/resources/com/ardublock/block/ardublock.xml +++ b/src/main/resources/com/ardublock/block/ardublock.xml @@ -1491,6 +1491,9 @@ </description> <BlockConnectors> <BlockConnector connector-type="string" connector-kind="plug" /> + <BlockConnector connector-type="string" connector-kind="socket" > + <DefaultArg genus-name="variable_string" label="buffer" /> + </BlockConnector> <BlockConnector connector-type="number" connector-kind="socket" /> </BlockConnectors> </BlockGenus>