初始化提交
This commit is contained in:
180
boards/default_src/python/converters/set.js
Normal file
180
boards/default_src/python/converters/set.js
Normal file
@@ -0,0 +1,180 @@
|
||||
'use strict';
|
||||
|
||||
pbc.assignD.get('Set')['check_assign'] = function (py2block, node, targets, value) {
|
||||
if (value._astname === "Set")
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
pbc.assignD.get('Set')['create_block'] = function (py2block, node, targets, value) {
|
||||
return block("set_create_with", node.lineno, {
|
||||
'VAR': py2block.Name_str(targets[0])
|
||||
},
|
||||
py2block.convertElements("ADD", value.elts), {
|
||||
"inline": "false",
|
||||
}, {
|
||||
"@items": value.elts.length
|
||||
});
|
||||
}
|
||||
|
||||
//len在text里实现
|
||||
|
||||
pbc.objectFunctionD.get('pop')['Set'] = function(py2block, func, args, keywords, starargs, kwargs, node){
|
||||
if (args.length === 0) {
|
||||
var popblock = py2block.convert(func.value);
|
||||
return block("set_pop", func.lineno, {}, {
|
||||
"SET":popblock
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}else if(args.length === 1){
|
||||
var objblock = py2block.convert(func.value);
|
||||
var argblock = py2block.convert(args[0]);
|
||||
return block("lists_pop", func.lineno, {}, {
|
||||
"LIST":objblock,
|
||||
"VALUE":argblock
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}else{
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
//tuple(mytuple), set(mytup)在lists.js中实现
|
||||
|
||||
function setOperate(mode){
|
||||
function converter(py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length !== 1) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var objblock = py2block.convert(func.value);
|
||||
var argblock = py2block.convert(args[0]);
|
||||
return block("set_operate", func.lineno, {
|
||||
'OPERATE': mode,
|
||||
}, {
|
||||
"SET1": objblock,
|
||||
"SET2": argblock
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
return converter;
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('union')['Set'] = setOperate('union');
|
||||
pbc.objectFunctionD.get('intersection')['Set'] = setOperate('intersection');
|
||||
pbc.objectFunctionD.get('difference')['Set'] = setOperate('difference');
|
||||
|
||||
|
||||
pbc.objectFunctionD.get('update')['Set'] = function(py2block, func, args, keywords, starargs, kwargs, node){
|
||||
if (args.length !== 1) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var objblock = py2block.convert(func.value);
|
||||
var argblock = py2block.convert(args[0]);
|
||||
return [block("set_update", func.lineno, {}, {
|
||||
"SET": objblock,
|
||||
"VAR": argblock
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
};
|
||||
|
||||
|
||||
function setOperateUpdate(mode){
|
||||
function converter(py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length !== 1) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var objblock = py2block.convert(func.value);
|
||||
var argblock = py2block.convert(args[0]);
|
||||
return [block("set_operate_update", func.lineno, {
|
||||
'OPERATE': mode,
|
||||
}, {
|
||||
"SET1": objblock,
|
||||
"SET2": argblock
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}
|
||||
return converter;
|
||||
}
|
||||
|
||||
|
||||
|
||||
pbc.objectFunctionD.get('difference_update')['Set'] = setOperateUpdate('difference_update');
|
||||
pbc.objectFunctionD.get('intersection_update')['Set'] = setOperateUpdate('intersection_update');
|
||||
|
||||
|
||||
function setAddDiscard(mode){
|
||||
function converter(py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length !== 1) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var objblock = py2block.convert(func.value);
|
||||
var argblock = py2block.convert(args[0]);
|
||||
return [block("set_add_discard", func.lineno, {
|
||||
'OPERATE':mode,
|
||||
}, {
|
||||
"SET":objblock,
|
||||
"data":argblock
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}
|
||||
return converter;
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('add')['Set'] = setAddDiscard('add');
|
||||
pbc.objectFunctionD.get('discard')['Set'] = setAddDiscard('discard');
|
||||
|
||||
|
||||
function setSub(mode){
|
||||
function converter(py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length !== 1) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var objblock = py2block.convert(func.value);
|
||||
var argblock = py2block.convert(args[0]);
|
||||
return block("set_sub", func.lineno, {
|
||||
'OPERATE':mode,
|
||||
}, {
|
||||
"SET1":objblock,
|
||||
"SET2":argblock
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
return converter;
|
||||
}
|
||||
|
||||
pbc.globalFunctionD['set'] = 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("set_create_with_noreturn", node.lineno, {},{}
|
||||
, {
|
||||
"inline": "true",
|
||||
}, {
|
||||
"@items": 0
|
||||
});
|
||||
}
|
||||
if (args.length ==1){
|
||||
var numblock = py2block.convert(args[0]);
|
||||
return block("set_toset", func.lineno, {}, {
|
||||
'VAR': numblock,
|
||||
}, {
|
||||
"inline": "false"
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
pbc.objectFunctionD.get('issubset')['Set'] = setSub('issubset');
|
||||
pbc.objectFunctionD.get('issuperset')['Set'] = setSub('issuperset');
|
||||
|
||||
Reference in New Issue
Block a user