初始化提交
This commit is contained in:
153
boards/default_src/python/converters/dicts.js
Normal file
153
boards/default_src/python/converters/dicts.js
Normal file
@@ -0,0 +1,153 @@
|
||||
'use strict';
|
||||
|
||||
pbc.assignD.get('Dict')['check_assign'] = function (py2block, node, targets, value) {
|
||||
if (value._astname === "Dict")
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
pbc.assignD.get('Dict')['create_block'] = function (py2block, node, targets, value) {
|
||||
var keys = value.keys;
|
||||
var values = value.values;
|
||||
|
||||
var keyList = [];
|
||||
var valueList = [];
|
||||
for (var i = 0; i < keys.length; i+= 1) {
|
||||
var sourceCode = py2block.getSourceCode(node).split('\n')[keys[i].lineno - 1];
|
||||
var s = keys[i].col_offset;
|
||||
var e = sourceCode.indexOf(":", keys[i].col_offset);
|
||||
keyList["KEY"+i] = sourceCode.substring(s, e).trim();
|
||||
valueList["ADD"+i] = py2block.convert(values[i]);
|
||||
}
|
||||
keyList['VAR'] = py2block.Name_str(targets[0]);
|
||||
|
||||
return block("dicts_create_with", node.lineno, keyList, valueList, {
|
||||
"inline": "false"
|
||||
}, {
|
||||
"@items": keys.length
|
||||
});
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('keys')['Dict'] = function(py2block, func, args, keywords, starargs, kwargs, node){
|
||||
if (args.length !== 0) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var objblock = py2block.convert(func.value);
|
||||
return block("dicts_keys", func.lineno, {}, {
|
||||
"DICT": objblock,
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
};
|
||||
|
||||
pbc.objectFunctionD.get('get')['Dict'] = function(py2block, func, args, keywords, starargs, kwargs, node){
|
||||
if (args.length !== 1 && args.length !== 2) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var objblock = py2block.convert(func.value);
|
||||
if (args.length == 2){
|
||||
var args0 = py2block.convert(args[0]);
|
||||
var args1 = py2block.convert(args[1]);
|
||||
return block("dicts_get_default", func.lineno, {}, {
|
||||
"DICT": objblock,
|
||||
"KEY": args0,
|
||||
"VAR": args1,
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
else{
|
||||
|
||||
var args1block = {
|
||||
_astname: "Name",
|
||||
id: {
|
||||
'v': 'None'
|
||||
}
|
||||
};
|
||||
var args0 = py2block.convert(args[0]);
|
||||
var args1 = py2block.convert(args1block);
|
||||
return block("dicts_get_default", func.lineno, {}, {
|
||||
"DICT": objblock,
|
||||
"KEY": args0,
|
||||
"VAR": args1,
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
//d['key']在python_to_blockly.js中实现
|
||||
|
||||
//d['key'] = 11;在python_to_blockly.js中实现
|
||||
|
||||
//del d['key'];在python_to_blockly.js中实现
|
||||
|
||||
//d.clear()在lists.js中实现
|
||||
|
||||
//d.pop('key')在set.js中实现
|
||||
|
||||
|
||||
pbc.objectFunctionD.get('setdefault')['Dict'] = function(py2block, func, args, keywords, starargs, kwargs, node){
|
||||
if (args.length !== 2) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var objblock = py2block.convert(func.value);
|
||||
var args0 = py2block.convert(args[0]);
|
||||
var args1 = py2block.convert(args[1]);
|
||||
return [block("dicts_setdefault", func.lineno, {}, {
|
||||
"DICT": objblock,
|
||||
"KEY": args0,
|
||||
"VAR": args1,
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
};
|
||||
|
||||
|
||||
pbc.objectFunctionD.get('items')['Dict'] = function(py2block, func, args, keywords, starargs, kwargs, node){
|
||||
if (args.length !== 0) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var objblock = py2block.convert(func.value);
|
||||
return block("dicts_items", func.lineno, {}, {
|
||||
"DICT": objblock,
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
pbc.objectFunctionD.get('values')['Dict'] = function(py2block, func, args, keywords, starargs, kwargs, node){
|
||||
if (args.length !== 0) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var objblock = py2block.convert(func.value);
|
||||
return block("dicts_values", func.lineno, {}, {
|
||||
"DICT": objblock,
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
pbc.globalFunctionD['dict'] = function(py2block, func, args, keywords, starargs, kwargs, node){
|
||||
if (args.length > 1) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
if (args.length ==0){
|
||||
return block("dicts_create_with_noreturn", node.lineno, {},{}
|
||||
, {
|
||||
"inline": "true",
|
||||
}, {
|
||||
"@items": 0
|
||||
});
|
||||
}
|
||||
if (args.length ==1){
|
||||
var numblock = py2block.convert(args[0]);
|
||||
return block("dicts_todict", func.lineno, {}, {
|
||||
'VAR': numblock,
|
||||
}, {
|
||||
"inline": "false"
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user