Files
2024-07-19 10:16:00 +08:00

181 lines
5.1 KiB
JavaScript

'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');