154 lines
4.3 KiB
JavaScript
154 lines
4.3 KiB
JavaScript
'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"
|
|
});
|
|
}
|
|
}
|