diff --git a/boards/default_src/arduino/webpack.common.js b/boards/default_src/arduino/webpack.common.js
new file mode 100644
index 00000000..5e590020
--- /dev/null
+++ b/boards/default_src/arduino/webpack.common.js
@@ -0,0 +1,13 @@
+const common = require('../../../webpack.common');
+const { merge } = require('webpack-merge');
+
+module.exports = merge(common, {
+ module: {
+ rules: [
+ {
+ test: /\.(txt|c|cpp|h|hpp)$/,
+ type: 'asset/source'
+ }
+ ]
+ }
+});
\ No newline at end of file
diff --git a/boards/default_src/arduino/webpack.dev.js b/boards/default_src/arduino/webpack.dev.js
index 54e4088a..34785049 100644
--- a/boards/default_src/arduino/webpack.dev.js
+++ b/boards/default_src/arduino/webpack.dev.js
@@ -1,11 +1,11 @@
-const path = require("path");
-const common = require("../../../webpack.common");
-const { merge } = require("webpack-merge");
-const HtmlWebpackPlugin = require("html-webpack-plugin");
+const path = require('path');
+const common = require('./webpack.common');
+const { merge } = require('webpack-merge');
+const HtmlWebpackPlugin = require('html-webpack-plugin');
const ESLintPlugin = require('eslint-webpack-plugin');
module.exports = merge(common, {
- mode: "development",
+ mode: 'development',
devtool: 'source-map',
plugins: [
new ESLintPlugin({
diff --git a/boards/default_src/arduino/webpack.prod.js b/boards/default_src/arduino/webpack.prod.js
index 45773239..331b45f4 100644
--- a/boards/default_src/arduino/webpack.prod.js
+++ b/boards/default_src/arduino/webpack.prod.js
@@ -1,11 +1,11 @@
-const path = require("path");
-const common = require("../../../webpack.common");
-const { merge } = require("webpack-merge");
-const TerserPlugin = require("terser-webpack-plugin");
-var HtmlWebpackPlugin = require("html-webpack-plugin");
+const path = require('path');
+const common = require('./webpack.common');
+const { merge } = require('webpack-merge');
+const TerserPlugin = require('terser-webpack-plugin');
+var HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = merge(common, {
- mode: "production",
+ mode: 'production',
optimization: {
minimize: true,
minimizer: [
diff --git a/boards/default_src/arduino_avr/blocks/lists.js b/boards/default_src/arduino_avr/blocks/lists.js
index 39f48709..c97bca3a 100644
--- a/boards/default_src/arduino_avr/blocks/lists.js
+++ b/boards/default_src/arduino_avr/blocks/lists.js
@@ -721,10 +721,9 @@ export const loop_array = {
init: function () {
this.appendValueInput("name")
.setCheck(null)
- .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_CONTORL_GET_TYPE)
- .appendField(new Blockly.FieldDropdown(DATATYPES), "TYPE")
.appendField(Blockly.Msg.MIXLY_LIST_NAME);
this.appendDummyInput()
+ .setAlign(Blockly.inputs.Align.RIGHT)
.appendField(new Blockly.FieldDropdown([
[Blockly.Msg.LEFT_CYCLE, "0"],
[Blockly.Msg.RIGHT_CYCLE, "1"]
@@ -732,7 +731,7 @@ export const loop_array = {
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setColour(LISTS_HUE);
- this.setTooltip(Blockly.Msg.LEFT_CYCLE + Blockly.Msg.LEFT_CYCLE1 + Blockly.Msg.RIGHT_CYCLE + Blockly.Msg.RIGHT_CYCLE1);
+ this.setTooltip('');
this.setHelpUrl("");
}
};
diff --git a/boards/default_src/arduino_avr/generators/lists.js b/boards/default_src/arduino_avr/generators/lists.js
index d98b00a7..f4e9ead8 100644
--- a/boards/default_src/arduino_avr/generators/lists.js
+++ b/boards/default_src/arduino_avr/generators/lists.js
@@ -259,19 +259,14 @@ export const lists_array2_setup_get_data = function (_, generator) {
return code1;
}
+import FUNC_ARRAY_ROTATE_LOOP_TEMPLATE from '../templates/func-array-rotate-loop.c';
+
// 一维数组循环
export const loop_array = function (_, generator) {
- var type = this.getFieldValue('TYPE');
var mode = this.getFieldValue('mode');
var name = generator.valueToCode(this, 'name', generator.ORDER_ATOMIC);
- if (mode == 0) {
- generator.definitions_['loop_array1'] = 'void array_left_loop() {\n ' + type + ' item =0;\n item = ' + name + '[(int)(0)];\n for (int i = (2); i <= (sizeof(' + name + ')/sizeof(' + name + '[0])); i = i + (1)) {\n ' + name + '[(int)((i - 1) - 1)] = ' + name + '[(int)(i - 1)];\n }\n ' + name + '[(int)(sizeof(' + name + ')/sizeof(' + name + '[0]) - 1)] = item;\n}\n';
- var code = 'array_left_loop();\n';
- }
- if (mode == 1) {
- generator.definitions_['loop_array'] = 'void array_right_loop() {\n ' + type + ' item =0;\n item = ' + name + '[(int)(sizeof(' + name + ')/sizeof(' + name + '[0]) - 1)];\n for (int i = (sizeof(' + name + ')/sizeof(' + name + '[0])); i >= (1); i = i + (-1)) {\n ' + name + '[(int)((i + 1) - 1)] = ' + name + '[(int)(i - 1)];\n }\n ' + name + '[(int)(0)] = item;\n}\n';
- var code = 'array_right_loop();\n';
- }
+ generator.definitions_['function_array_rotate_loop'] = FUNC_ARRAY_ROTATE_LOOP_TEMPLATE;
+ var code = `array_rotate_loop(${name}, sizeof(${name}[0]), sizeof(${name}) / sizeof(${name}[0]), ${mode});\n`;
return code;
}
diff --git a/boards/default_src/arduino_avr/template.xml b/boards/default_src/arduino_avr/template.xml
index ae70d5c5..b43eeaff 100644
--- a/boards/default_src/arduino_avr/template.xml
+++ b/boards/default_src/arduino_avr/template.xml
@@ -577,6 +577,13 @@
+
+
+
+ mylist
+
+
+
int
mylist
@@ -645,7 +652,7 @@
- array
+ mylist
@@ -667,7 +674,7 @@
- array
+ mylist
@@ -689,7 +696,7 @@
- array
+ mylist
@@ -703,13 +710,6 @@
-
-
-
- array
-
-
-
@@ -2690,7 +2690,7 @@
- array
+ mylist
diff --git a/boards/default_src/arduino_avr/templates/func-array-rotate-loop.c b/boards/default_src/arduino_avr/templates/func-array-rotate-loop.c
new file mode 100644
index 00000000..e2143b40
--- /dev/null
+++ b/boards/default_src/arduino_avr/templates/func-array-rotate-loop.c
@@ -0,0 +1,20 @@
+void array_rotate_loop(void *arr, size_t elem_size, size_t length, bool right) {
+ if (length <= 1) {
+ return;
+ }
+
+ uint8_t buffer[32];
+ if (elem_size > sizeof(buffer)) {
+ return;
+ }
+
+ if (right) {
+ memcpy(buffer, (uint8_t *)arr + (length - 1) * elem_size, elem_size);
+ memmove((uint8_t *)arr + elem_size, arr, (length - 1) * elem_size);
+ memcpy(arr, buffer, elem_size);
+ } else {
+ memcpy(buffer, arr, elem_size);
+ memmove(arr, (uint8_t *)arr + elem_size, (length - 1) * elem_size);
+ memcpy((uint8_t *)arr + (length - 1) * elem_size, buffer, elem_size);
+ }
+}
\ No newline at end of file
diff --git a/boards/default_src/arduino_avr/webpack.common.js b/boards/default_src/arduino_avr/webpack.common.js
index 835b2f01..76e39a5e 100644
--- a/boards/default_src/arduino_avr/webpack.common.js
+++ b/boards/default_src/arduino_avr/webpack.common.js
@@ -1,11 +1,19 @@
-const path = require("path");
-const common = require("../../../webpack.common");
-const { merge } = require("webpack-merge");
+const path = require('path');
+const common = require('../../../webpack.common');
+const { merge } = require('webpack-merge');
module.exports = merge(common, {
resolve: {
alias: {
'@mixly/arduino': path.resolve(__dirname, '../arduino')
}
+ },
+ module: {
+ rules: [
+ {
+ test: /\.(txt|c|cpp|h|hpp)$/,
+ type: 'asset/source'
+ }
+ ]
}
});
\ No newline at end of file
diff --git a/boards/default_src/arduino_avr/webpack.dev.js b/boards/default_src/arduino_avr/webpack.dev.js
index d84bda69..31d3a078 100644
--- a/boards/default_src/arduino_avr/webpack.dev.js
+++ b/boards/default_src/arduino_avr/webpack.dev.js
@@ -1,11 +1,11 @@
-const path = require("path");
-const common = require("./webpack.common");
-const { merge } = require("webpack-merge");
-const HtmlWebpackPlugin = require("html-webpack-plugin");
+const path = require('path');
+const common = require('./webpack.common');
+const { merge } = require('webpack-merge');
+const HtmlWebpackPlugin = require('html-webpack-plugin');
const ESLintPlugin = require('eslint-webpack-plugin');
module.exports = merge(common, {
- mode: "development",
+ mode: 'development',
devtool: 'source-map',
plugins: [
new ESLintPlugin({
diff --git a/boards/default_src/arduino_avr/webpack.prod.js b/boards/default_src/arduino_avr/webpack.prod.js
index 0e9f3265..331b45f4 100644
--- a/boards/default_src/arduino_avr/webpack.prod.js
+++ b/boards/default_src/arduino_avr/webpack.prod.js
@@ -1,11 +1,11 @@
-const path = require("path");
-const common = require("./webpack.common");
-const { merge } = require("webpack-merge");
-const TerserPlugin = require("terser-webpack-plugin");
-var HtmlWebpackPlugin = require("html-webpack-plugin");
+const path = require('path');
+const common = require('./webpack.common');
+const { merge } = require('webpack-merge');
+const TerserPlugin = require('terser-webpack-plugin');
+var HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = merge(common, {
- mode: "production",
+ mode: 'production',
optimization: {
minimize: true,
minimizer: [
diff --git a/boards/default_src/arduino_esp32/origin/xml/esp32.xml b/boards/default_src/arduino_esp32/origin/xml/esp32.xml
index 870670d1..9c3dee63 100644
--- a/boards/default_src/arduino_esp32/origin/xml/esp32.xml
+++ b/boards/default_src/arduino_esp32/origin/xml/esp32.xml
@@ -611,6 +611,13 @@
+
+
+
+ mylist
+
+
+
int
mylist
@@ -679,7 +686,7 @@
- array
+ mylist
@@ -701,7 +708,7 @@
- array
+ mylist
@@ -723,7 +730,7 @@
- array
+ mylist
@@ -737,13 +744,6 @@
-
-
-
- array
-
-
-
@@ -2096,7 +2096,7 @@
- array
+ mylist
diff --git a/boards/default_src/arduino_esp32/origin/xml/mpython.xml b/boards/default_src/arduino_esp32/origin/xml/mpython.xml
index 1892aeca..1ac6f4c5 100644
--- a/boards/default_src/arduino_esp32/origin/xml/mpython.xml
+++ b/boards/default_src/arduino_esp32/origin/xml/mpython.xml
@@ -582,6 +582,13 @@
+
+
+
+ mylist
+
+
+
int
mylist
@@ -650,7 +657,7 @@
- array
+ mylist
@@ -672,7 +679,7 @@
- array
+ mylist
@@ -694,7 +701,7 @@
- array
+ mylist
@@ -708,12 +715,7 @@
-
-
-
- array
-
-
+
@@ -2204,7 +2206,7 @@
- array
+ mylist
diff --git a/boards/default_src/arduino_esp32/webpack.common.js b/boards/default_src/arduino_esp32/webpack.common.js
index 274a3f53..4d398c84 100644
--- a/boards/default_src/arduino_esp32/webpack.common.js
+++ b/boards/default_src/arduino_esp32/webpack.common.js
@@ -1,6 +1,6 @@
-const path = require("path");
-const common = require("../../../webpack.common");
-const { merge } = require("webpack-merge");
+const path = require('path');
+const common = require('../../../webpack.common');
+const { merge } = require('webpack-merge');
module.exports = merge(common, {
resolve: {
@@ -8,5 +8,13 @@ module.exports = merge(common, {
'@mixly/arduino': path.resolve(__dirname, '../arduino'),
'@mixly/arduino-avr': path.resolve(__dirname, '../arduino_avr')
}
+ },
+ module: {
+ rules: [
+ {
+ test: /\.(txt|c|cpp|h|hpp)$/,
+ type: 'asset/source'
+ }
+ ]
}
});
\ No newline at end of file
diff --git a/boards/default_src/arduino_esp32/webpack.dev.js b/boards/default_src/arduino_esp32/webpack.dev.js
index d84bda69..31d3a078 100644
--- a/boards/default_src/arduino_esp32/webpack.dev.js
+++ b/boards/default_src/arduino_esp32/webpack.dev.js
@@ -1,11 +1,11 @@
-const path = require("path");
-const common = require("./webpack.common");
-const { merge } = require("webpack-merge");
-const HtmlWebpackPlugin = require("html-webpack-plugin");
+const path = require('path');
+const common = require('./webpack.common');
+const { merge } = require('webpack-merge');
+const HtmlWebpackPlugin = require('html-webpack-plugin');
const ESLintPlugin = require('eslint-webpack-plugin');
module.exports = merge(common, {
- mode: "development",
+ mode: 'development',
devtool: 'source-map',
plugins: [
new ESLintPlugin({
diff --git a/boards/default_src/arduino_esp32/webpack.prod.js b/boards/default_src/arduino_esp32/webpack.prod.js
index 0e9f3265..331b45f4 100644
--- a/boards/default_src/arduino_esp32/webpack.prod.js
+++ b/boards/default_src/arduino_esp32/webpack.prod.js
@@ -1,11 +1,11 @@
-const path = require("path");
-const common = require("./webpack.common");
-const { merge } = require("webpack-merge");
-const TerserPlugin = require("terser-webpack-plugin");
-var HtmlWebpackPlugin = require("html-webpack-plugin");
+const path = require('path');
+const common = require('./webpack.common');
+const { merge } = require('webpack-merge');
+const TerserPlugin = require('terser-webpack-plugin');
+var HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = merge(common, {
- mode: "production",
+ mode: 'production',
optimization: {
minimize: true,
minimizer: [
diff --git a/boards/default_src/arduino_esp8266/template.xml b/boards/default_src/arduino_esp8266/template.xml
index ac78383b..652ed40b 100644
--- a/boards/default_src/arduino_esp8266/template.xml
+++ b/boards/default_src/arduino_esp8266/template.xml
@@ -536,6 +536,13 @@
+
+
+
+ mylist
+
+
+
int
mylist
@@ -604,7 +611,7 @@
- array
+ mylist
@@ -626,7 +633,7 @@
- array
+ mylist
@@ -648,7 +655,7 @@
- array
+ mylist
@@ -662,13 +669,6 @@
-
-
-
- array
-
-
-
diff --git a/boards/default_src/arduino_esp8266/webpack.common.js b/boards/default_src/arduino_esp8266/webpack.common.js
index 274a3f53..4d398c84 100644
--- a/boards/default_src/arduino_esp8266/webpack.common.js
+++ b/boards/default_src/arduino_esp8266/webpack.common.js
@@ -1,6 +1,6 @@
-const path = require("path");
-const common = require("../../../webpack.common");
-const { merge } = require("webpack-merge");
+const path = require('path');
+const common = require('../../../webpack.common');
+const { merge } = require('webpack-merge');
module.exports = merge(common, {
resolve: {
@@ -8,5 +8,13 @@ module.exports = merge(common, {
'@mixly/arduino': path.resolve(__dirname, '../arduino'),
'@mixly/arduino-avr': path.resolve(__dirname, '../arduino_avr')
}
+ },
+ module: {
+ rules: [
+ {
+ test: /\.(txt|c|cpp|h|hpp)$/,
+ type: 'asset/source'
+ }
+ ]
}
});
\ No newline at end of file
diff --git a/boards/default_src/arduino_esp8266/webpack.dev.js b/boards/default_src/arduino_esp8266/webpack.dev.js
index d84bda69..31d3a078 100644
--- a/boards/default_src/arduino_esp8266/webpack.dev.js
+++ b/boards/default_src/arduino_esp8266/webpack.dev.js
@@ -1,11 +1,11 @@
-const path = require("path");
-const common = require("./webpack.common");
-const { merge } = require("webpack-merge");
-const HtmlWebpackPlugin = require("html-webpack-plugin");
+const path = require('path');
+const common = require('./webpack.common');
+const { merge } = require('webpack-merge');
+const HtmlWebpackPlugin = require('html-webpack-plugin');
const ESLintPlugin = require('eslint-webpack-plugin');
module.exports = merge(common, {
- mode: "development",
+ mode: 'development',
devtool: 'source-map',
plugins: [
new ESLintPlugin({
diff --git a/boards/default_src/arduino_esp8266/webpack.prod.js b/boards/default_src/arduino_esp8266/webpack.prod.js
index 0e9f3265..331b45f4 100644
--- a/boards/default_src/arduino_esp8266/webpack.prod.js
+++ b/boards/default_src/arduino_esp8266/webpack.prod.js
@@ -1,11 +1,11 @@
-const path = require("path");
-const common = require("./webpack.common");
-const { merge } = require("webpack-merge");
-const TerserPlugin = require("terser-webpack-plugin");
-var HtmlWebpackPlugin = require("html-webpack-plugin");
+const path = require('path');
+const common = require('./webpack.common');
+const { merge } = require('webpack-merge');
+const TerserPlugin = require('terser-webpack-plugin');
+var HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = merge(common, {
- mode: "production",
+ mode: 'production',
optimization: {
minimize: true,
minimizer: [