Skip to content

Commit

Permalink
v0.9.7
Browse files Browse the repository at this point in the history
  • Loading branch information
SebCanet committed Jul 25, 2023
1 parent 215750c commit 4849cc0
Show file tree
Hide file tree
Showing 523 changed files with 470 additions and 57,126 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.txt
Expand Up @@ -3,6 +3,7 @@ v0.9.7
- add local # global variable scope
- add instanciation in object blocks (see servomotor as example)
- modify Arrowhead to use instances
- fix arabic RTL workspace

v0.9.6
- embed Block Factory
Expand Down
18 changes: 9 additions & 9 deletions S4E/categories/blockly/procedures.arduino
Expand Up @@ -23,7 +23,7 @@ Blockly.Arduino.procedures_defreturn = function() {
var funcName = Blockly.Arduino.nameDB_.getName(this.getFieldValue('NAME'),
Blockly.Procedures.NAME_TYPE);
this.name = funcName;

var args = '';
for (var x = 0; x < this.arguments_.length; x++) {
var arg = '';
Expand All @@ -43,15 +43,15 @@ Blockly.Arduino.procedures_defreturn = function() {
}
this.arguments_.splice(x, 1, argType + ' ' + arg); // remove x and add argtype + arg
}

console.log(Blockly.Arduino.TypeVarLocalFun[arg]);
if(Blockly.Arduino.TypeVarLocalFun[arg]){
}else{
Blockly.Arduino.TypeVarLocalFun[arg] = [];

console.log(Blockly.Arduino.TypeEachLocalVar[arg]);
if (Blockly.Arduino.TypeEachLocalVar[arg]) {} else {
Blockly.Arduino.TypeEachLocalVar[arg] = [];
}
console.log(Blockly.Arduino.TypeVarLocalFun[arg]); Blockly.Arduino.TypeVarLocalFun[arg].push([argType,this.id,"arg",this.id]);
console.log(Blockly.Arduino.TypeEachLocalVar[arg]);
Blockly.Arduino.TypeEachLocalVar[arg].push([argType, this.id, "arg", this.id]);
console.log("after add");
console.log(Blockly.Arduino.TypeVarLocalFun[arg]);
console.log(Blockly.Arduino.TypeEachLocalVar[arg]);
args += argType + ' ' + arg + ', ';
}
var branch = Blockly.Arduino.statementToCode(this, 'STACK');
Expand Down Expand Up @@ -153,4 +153,4 @@ Blockly.Arduino.procedures_ifreturn = function() {
}
code += '}\n';
return code;
};
};
80 changes: 29 additions & 51 deletions S4E/categories/blockly/variables.arduino
Expand Up @@ -21,81 +21,59 @@ Blockly.Arduino['variables_get'] = function(block) {
};

Blockly.Arduino['variables_set'] = function(block) {
var argument0 = Blockly.Arduino.valueToCode(block, 'VALUE', Blockly.Arduino.ORDER_ASSIGNMENT) || '0';
var varName = Blockly.Arduino.nameDB_.getName(block.getFieldValue('VAR'), Blockly.Variables.NAME_TYPE);
let argument0 = Blockly.Arduino.valueToCode(block, 'VALUE', Blockly.Arduino.ORDER_ASSIGNMENT) || '0';
let varName = Blockly.Arduino.nameDB_.getName(block.getFieldValue('VAR'), Blockly.Variables.NAME_TYPE);
return (varName + ' = ' + argument0 + ';\n');
};


Blockly.Arduino['variables_set_scope'] = function(block) {
var argument0 = Blockly.Arduino.valueToCode(block, 'VALUE', Blockly.Arduino.ORDER_ASSIGNMENT) || '0';
var varName = Blockly.Arduino.nameDB_.getName(block.getFieldValue('VAR'), Blockly.Variables.NAME_TYPE);
var result = varName + ' = ' + argument0 + ';\n';
var scope = block.getFieldValue('SCOPE');
var collisionLabel = "collision of a local and argument of a function";
block.setWarningText(null,
collisionLabel);
collisionLabel = "collision of a local variables";
block.setWarningText(null,
collisionLabel);
if (scope && scope.startsWith('L') && Blockly.Arduino.TypeVarLocalFun[varName]) {
for (var i = 0; i < Blockly.Arduino.TypeVarLocalFun[varName].length; i++){

var varType = Blockly.Arduino.TypeVarLocalFun[varName][i][0];
var varProc = Blockly.Arduino.TypeVarLocalFun[varName][i][1];
var scope = Blockly.Arduino.TypeVarLocalFun[varName][i][2];
var idBlock = Blockly.Arduino.TypeVarLocalFun[varName][i][3];


if ((block.getRootBlock().id === varProc) && (scope === "arg")){
var collisionLabel = "collision of a local and argument of a function";
block.setWarningText("You are trying to set a local variable with the same name as an argument of this function",
collisionLabel);
let argument0 = Blockly.Arduino.valueToCode(block, 'VALUE', Blockly.Arduino.ORDER_ASSIGNMENT) || '0';
let varName = Blockly.Arduino.nameDB_.getName(block.getFieldValue('VAR'), Blockly.Variables.NAME_TYPE);
let result = varName + ' = ' + argument0 + ';\n';
let scope = block.getFieldValue('SCOPE');
if (scope && scope.startsWith('L') && Blockly.Arduino.TypeEachLocalVar[varName]) {
for (let i = 0; i < Blockly.Arduino.TypeEachLocalVar[varName].length; i++) {
let varType = Blockly.Arduino.TypeEachLocalVar[varName][i][0];
let varProc = Blockly.Arduino.TypeEachLocalVar[varName][i][1];
let scope = Blockly.Arduino.TypeEachLocalVar[varName][i][2];
let idBlock = Blockly.Arduino.TypeEachLocalVar[varName][i][3];
if (block.id === idBlock) {
if (varType) {
result = varType + ' ' + result;
}


if (block.id === idBlock){
if (varType){
result = varType + ' '+ result;
}
}else if(scope === "local"){
var collisionLabel = "collision of a local variables";
block.setWarningText("You are trying to set a local variable with the same name as a local variable already registred",
collisionLabel);
}


}
}
}
}
}
return result;
};

Blockly.Arduino['variables_set_type'] = function(block) {
var argument0 = Blockly.Arduino.valueToCode(block, 'VARIABLE_SETTYPE_INPUT', Blockly.Arduino.ORDER_ASSIGNMENT) || '0';
var varType = Blockly.Arduino.getArduinoType_(Blockly.Types[block.getFieldValue('VARIABLE_SETTYPE_TYPE')]);
let argument0 = Blockly.Arduino.valueToCode(block, 'VARIABLE_SETTYPE_INPUT', Blockly.Arduino.ORDER_ASSIGNMENT) || '0';
let varType = Blockly.Arduino.getArduinoType_(Blockly.Types[block.getFieldValue('VARIABLE_SETTYPE_TYPE')]);
let code = '(' + varType + ')(' + argument0 + ')';
return [code, Blockly.Arduino.ORDER_ATOMIC];
};

Blockly.Arduino['variables_const'] = function(block) {
var argument0 = Blockly.Arduino.valueToCode(block, 'VALUE', Blockly.Arduino.ORDER_ASSIGNMENT) || '0';
var varName = Blockly.Arduino.nameDB_.getName(block.getFieldValue('VAR'), Blockly.Variables.NAME_TYPE);
var typeBlock = Blockly.Arduino.getArduinoType_(Blockly.Types.getChildBlockType(block));
let argument0 = Blockly.Arduino.valueToCode(block, 'VALUE', Blockly.Arduino.ORDER_ASSIGNMENT) || '0';
let varName = Blockly.Arduino.nameDB_.getName(block.getFieldValue('VAR'), Blockly.Variables.NAME_TYPE);
let typeBlock = Blockly.Arduino.getArduinoType_(Blockly.Types.getChildBlockType(block));
Blockly.Arduino.variables_[block.getFieldValue('VAR')] = 'const ' + typeBlock + ' ' + varName + ' = ' + argument0 + ';';
return '';
};

Blockly.Arduino['variables_set_init'] = function(block) {
var argument0 = Blockly.Arduino.valueToCode(block, 'VALUE', Blockly.Arduino.ORDER_ASSIGNMENT) || '0';
var varName = Blockly.Arduino.nameDB_.getName(block.getFieldValue('VAR'), Blockly.Variables.NAME_TYPE);
var varType = Blockly.Arduino.getArduinoType_(Blockly.Types[block.getFieldValue('VARIABLE_SETTYPE_TYPE')]);
let argument0 = Blockly.Arduino.valueToCode(block, 'VALUE', Blockly.Arduino.ORDER_ASSIGNMENT) || '0';
let varName = Blockly.Arduino.nameDB_.getName(block.getFieldValue('VAR'), Blockly.Variables.NAME_TYPE);
let varType = Blockly.Arduino.getArduinoType_(Blockly.Types[block.getFieldValue('VARIABLE_SETTYPE_TYPE')]);
Blockly.Arduino.variables_[block.getFieldValue('VAR')] = varType + ' ' + varName + ' = ' + argument0 + ';';
return '';
};

Blockly.Arduino['variables_define'] = function(block) {
var argument0 = Blockly.Arduino.valueToCode(block, 'VALUE', Blockly.Arduino.ORDER_ASSIGNMENT) || '0';
var varName = Blockly.Arduino.nameDB_.getName(block.getFieldValue('VAR'), Blockly.Variables.NAME_TYPE);
let argument0 = Blockly.Arduino.valueToCode(block, 'VALUE', Blockly.Arduino.ORDER_ASSIGNMENT) || '0';
let varName = Blockly.Arduino.nameDB_.getName(block.getFieldValue('VAR'), Blockly.Variables.NAME_TYPE);
Blockly.Arduino.variables_[block.getFieldValue('VAR')] = '#define ' + varName + ' ' + argument0;
return "";
};
};
143 changes: 69 additions & 74 deletions generators/arduino_generator.js
Expand Up @@ -115,7 +115,7 @@ Blockly.Arduino.ORDER_OVERRIDES = [
Blockly.Arduino.DEF_FUNC_NAME = Blockly.Arduino.FUNCTION_NAME_PLACEHOLDER_;

// Dictionnary of Type of each local variable
Blockly.Arduino.TypeVarLocalFun = Object.create(null);
Blockly.Arduino.TypeEachLocalVar = Object.create(null);

// Dictionnary of Type of each Instance
Blockly.Arduino.InstanceTypeWithNames = Object.create(null);
Expand All @@ -133,8 +133,8 @@ Blockly.Arduino.init = function(workspace) {
Blockly.Arduino.variables_ = Object.create(null);
// Create a dictionary of functions from the code generator
Blockly.Arduino.codeFunctions_ = Object.create(null);


// Create a dictionary of functions created by the user
Blockly.Arduino.userFunctions_ = Object.create(null);
// Create a dictionary mapping desired function names in definitions_
Expand All @@ -154,39 +154,34 @@ Blockly.Arduino.init = function(workspace) {
Blockly.Arduino.nameDB_.setVariableMap(workspace.getVariableMap());

// Iterate through to capture all blocks types and set the function arguments
var varsWithTypes = Blockly.Arduino.StaticTyping.collectVarsWithTypes(workspace);
let varsWithTypes = Blockly.Arduino.StaticTyping.collectVarsWithTypes(workspace);

Blockly.Arduino.StaticTyping.setProcedureArgs(workspace, varsWithTypes);

// Set variable declarations with their Arduino type in the defines dictionary
for (var varName in varsWithTypes) {
for (let varName in varsWithTypes) {
if (varsWithTypes[varName]) {
if (Array.isArray(varsWithTypes[varName])){
var type = varsWithTypes[varName][0][0];
var idProc = varsWithTypes[varName][0][1];
var scope = varsWithTypes[varName][0][2];
var idBlock = varsWithTypes[varName][0][4];
var def = Blockly.Arduino.getArduinoType_(type) +
' ' +
Blockly.Arduino.nameDB_.getName(varName, Blockly.Variables.NAME_TYPE) +
';';
if (scope.startsWith("G")){
Blockly.Arduino.addVariable(varName,def);
}else{
var name = Blockly.Arduino.nameDB_.getName(varName, Blockly.Variables.NAME_TYPE);

if(Blockly.Arduino.TypeVarLocalFun[name]){
}else{
Blockly.Arduino.TypeVarLocalFun[name] = [];
}
Blockly.Arduino.TypeVarLocalFun[name].push([Blockly.Arduino.getArduinoType_(type),idProc,"local",idBlock]);



if (Array.isArray(varsWithTypes[varName])) {
let type = varsWithTypes[varName][0][0];
let idProc = varsWithTypes[varName][0][1];
let scope = varsWithTypes[varName][0][2];
let idBlock = varsWithTypes[varName][0][4];
let def = Blockly.Arduino.getArduinoType_(type) +
' ' +
Blockly.Arduino.nameDB_.getName(varName, Blockly.Variables.NAME_TYPE) +
';';
if (scope.startsWith("G")) {
Blockly.Arduino.addVariable(varName, def);
} else {
let name = Blockly.Arduino.nameDB_.getName(varName, Blockly.Variables.NAME_TYPE);

if (Blockly.Arduino.TypeEachLocalVar[name]) {} else {
Blockly.Arduino.TypeEachLocalVar[name] = [];
}

Blockly.Arduino.TypeEachLocalVar[name].push([Blockly.Arduino.getArduinoType_(type), idProc, "local", idBlock]);
}
} else if (varsWithTypes[varName].arrayType) {
var varType = Blockly.Arduino.recurseArrayType(varName, varsWithTypes);
let varType = Blockly.Arduino.recurseArrayType(varName, varsWithTypes);
Blockly.Arduino.addVariable(varName,
varType +
' ' +
Expand Down Expand Up @@ -328,8 +323,8 @@ Blockly.Arduino.finish = function(code) {
delete Blockly.Arduino.functionNames_;
delete Blockly.Arduino.setups_;
delete Blockly.Arduino.pins_;
Blockly.Arduino.TypeVarLocalFun = Object.create(null);
Blockly.Arduino.TypeEachLocalVar = Object.create(null);

Blockly.Arduino.nameDB_.reset();

var allDefs = includes.join('\n') + definitions.join('\n') + variables.join('\n') + functions.join('\n');
Expand Down Expand Up @@ -473,10 +468,10 @@ Blockly.Arduino.quote_ = function(string) {
* @protected
*/
Blockly.Arduino.multiline_quote_ = function(string) {
// Can't use goog.string.quote since Google's style guide recommends
// JS string literals use single quotes.
var lines = string.split(/\n/g).map(Blockly.Arduino.quote_);
return lines.join(' + \'\\n\' +\n');
// Can't use goog.string.quote since Google's style guide recommends
// JS string literals use single quotes.
var lines = string.split(/\n/g).map(Blockly.Arduino.quote_);
return lines.join(' + \'\\n\' +\n');
};

/**
Expand Down Expand Up @@ -578,29 +573,29 @@ Blockly.Arduino.getArduinoType_ = function(typeBlockly) {
Blockly.Arduino.getArduinoTypeByArduinoId_ = function(typeBlockly) {
switch (typeBlockly) {
case 'volatile int':
return 'VOLATIL_NUMBER';
return 'VOLATIL_NUMBER';
case 'byte':
return 'SHORT_NUMBER';
return 'SHORT_NUMBER';
case 'int':
return 'NUMBER';
return 'NUMBER';
case 'unsigned int':
return 'UNS_NUMBER';
return 'UNS_NUMBER';
case 'long':
return 'LARGE_NUMBER';
return 'LARGE_NUMBER';
case 'unsigned long':
return 'LARGE_UNS_NUMBER';
return 'LARGE_UNS_NUMBER';
case 'float':
return 'DECIMAL';
return 'DECIMAL';
case 'String':
return 'TEXT';
return 'TEXT';
case 'char':
return 'CHARACTER';
return 'CHARACTER';
case 'boolean':
return 'BOOLEAN';
return 'BOOLEAN';
case 'void':
return 'NULL';
return 'NULL';
default:
return 'UNDEF';
return 'UNDEF';
}
};

Expand Down Expand Up @@ -650,31 +645,31 @@ Blockly.Arduino.getArduinoTypeById_ = function(Id) {
* @private
*/
Blockly.Arduino.getArduinoReverseType_ = function(ArduinoType) {
switch (ArduinoType) {
case 'volatile int':
return Blockly.Types.VOLATIL_NUMBER.typeId;
case 'byte':
return Blockly.Types.SHORT_NUMBER.typeId;
case 'int':
return Blockly.Types.NUMBER.typeId;
case 'unsigned int':
return Blockly.Types.UNS_NUMBER.typeId;
case 'long':
return Blockly.Types.LARGE_NUMBER.typeId;
case 'unsigned long':
return Blockly.Types.LARGE_UNS_NUMBER.typeId;
case 'float':
return Blockly.Types.DECIMAL.typeId;
case 'String':
return Blockly.Types.TEXT.typeId;
case 'char':
return Blockly.Types.CHARACTER.typeId;
case 'boolean':
return Blockly.Types.BOOLEAN.typeId;
case 'void':
return Blockly.Types.NULL.typeId;
default:
return Blockly.Types.UNDEF.typeId;
switch (ArduinoType) {
case 'volatile int':
return Blockly.Types.VOLATIL_NUMBER.typeId;
case 'byte':
return Blockly.Types.SHORT_NUMBER.typeId;
case 'int':
return Blockly.Types.NUMBER.typeId;
case 'unsigned int':
return Blockly.Types.UNS_NUMBER.typeId;
case 'long':
return Blockly.Types.LARGE_NUMBER.typeId;
case 'unsigned long':
return Blockly.Types.LARGE_UNS_NUMBER.typeId;
case 'float':
return Blockly.Types.DECIMAL.typeId;
case 'String':
return Blockly.Types.TEXT.typeId;
case 'char':
return Blockly.Types.CHARACTER.typeId;
case 'boolean':
return Blockly.Types.BOOLEAN.typeId;
case 'void':
return Blockly.Types.NULL.typeId;
default:
return Blockly.Types.UNDEF.typeId;
}
};

Expand All @@ -685,4 +680,4 @@ Blockly.Arduino.noGeneratorCodeInline = function() {

Blockly.Arduino.noGeneratorCodeLine = function() {
return '';
};Blockly.Arduino.TypeVarLocalFun[name]
};
1 change: 0 additions & 1 deletion js/blockly_playground.js
Expand Up @@ -14,7 +14,6 @@ goog.require('Blockly.WorkspaceCommentSvg');
goog.require('Blockly.WorkspaceCommentSvg.render');

'use strict';
var Code;

Code.genWorkspace = function(rtlArg, toolboxArg, rendererArg) {
let pluginToAdd = {};
Expand Down

0 comments on commit 4849cc0

Please sign in to comment.