From 00376c0eb1926e8469de81aa7b4ce121c49fe820 Mon Sep 17 00:00:00 2001 From: DrMaxNix Date: Sun, 2 Oct 2022 16:30:28 +0200 Subject: [PATCH] :tada: `mul` command --- src/command/mul.js | 73 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 src/command/mul.js diff --git a/src/command/mul.js b/src/command/mul.js new file mode 100644 index 0000000..e11f184 --- /dev/null +++ b/src/command/mul.js @@ -0,0 +1,73 @@ +Juicescript.command_define({ + name: "mul", + alias: [], + + validate: function(runner){ + // count + runner.argument_validate_count({min: 2, max: null}); + if(runner.has_error) return; + + // types + runner.argument_validate_type(1, Juicescript.argument_type.VARIABLE); + + for(var q = 2; q <= runner.command.argument.length; q++){ + runner.argument_validate_type(q, Juicescript.argument_type.VALUE); + } + }, + + execute: function(runner){ + // GET VARIABLE // + // variable object + let variable = runner.argument_variable(1); + + // get its value and data_type + let value = runner.variable_get(variable); + let data_type = runner.data_type(value); + + + // MULTIPLY ALL OTHER FACTORS // + let main_factor = 1; + for(var q = 2; q <= runner.command.argument.length; q++){ + // get factor + let factor = runner.argument_value(q); + + // validate data type + let factor_data_type = runner.data_type(factor); + if(factor_data_type !== Juicescript.data_type.NUM){ + // ignore with warning + runner.warning_argument(q, "invalid data type " + Juicescript.data_type.name(factor_data_type)); + continue; + } + + // factor into main factor + main_factor *= factor; + } + + + // NUMBER MULTIPLICATION // + if(data_type === Juicescript.data_type.NUM){ + // multiply by main factor + value *= main_factor + + // store back to variable + runner.variable_set(variable, value); + return; + } + + + // STRING MULTIPLICATION // + if(data_type === Juicescript.data_type.STR){ + // repeat string factor-times + value = value.repeat(main_factor); + + // store back to variable + runner.variable_set(variable, value); + return; + } + + + // INVALID DATA TYPE // + // ignore with warning + runner.warning_argument(1, "invalid data type " + Juicescript.data_type.name(data_type)); + } +});