| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- Sk.builtin.structseq_types = {};
- Sk.builtin.make_structseq = function (module, name, fields, doc) {
- var nm = module + "." + name;
- var flds = [];
- var docs = [];
- var i;
- for (var key in fields) {
- flds.push(key);
- docs.push(fields[key]);
- }
- var cons = function structseq_constructor(arg) {
- Sk.builtin.pyCheckArgs(nm, arguments, 1, 1);
- var o;
- var it, i, v;
- if (!(this instanceof Sk.builtin.structseq_types[nm])) {
- o = Object.create(Sk.builtin.structseq_types[nm].prototype);
- o.constructor.apply(o, arguments);
- return o;
- }
- if (Object.prototype.toString.apply(arg) === "[object Array]") {
- v = arg;
- } else {
- v = [];
- for (it = Sk.abstr.iter(arg), i = it.tp$iternext(); i !== undefined; i = it.tp$iternext()) {
- v.push(i);
- }
- if (v.length != flds.length) {
- throw new Sk.builtin.TypeError(nm + "() takes a " + flds.length + "-sequence (" + v.length + "-sequence given)");
- }
- }
- Sk.builtin.tuple.call(this, v);
- this.__class__ = Sk.builtin.structseq_types[nm];
- };
- Sk.builtin.structseq_types[nm] = cons;
- goog.inherits(cons, Sk.builtin.tuple);
- if (doc) {
- cons.prototype.__doc__ = doc;
- }
- cons.prototype.tp$name = nm;
- cons.prototype.ob$type = Sk.builtin.type.makeIntoTypeObj(nm, Sk.builtin.structseq_types[nm]);
- cons.prototype.ob$type["$d"] = new Sk.builtin.dict([]);
- cons.prototype.ob$type["$d"].mp$ass_subscript(Sk.builtin.type.basesStr_, new Sk.builtin.tuple([Sk.builtin.tuple]));
- //var mro = Sk.builtin.type.buildMRO(cons.prototype.ob$type);
- //cons.prototype.ob$type["$d"].mp$ass_subscript(Sk.builtin.type.mroStr_, mro);
- //cons.prototype.ob$type.tp$mro = mro;
- cons.prototype.__getitem__ = new Sk.builtin.func(function (self, index) {
- return Sk.builtin.tuple.prototype.mp$subscript.call(self, index);
- });
- cons.prototype.__reduce__ = new Sk.builtin.func(function (self) {
- throw new Sk.builtin.Exception("__reduce__ is not implemented");
- });
- cons.prototype["$r"] = function () {
- var ret;
- var i;
- var bits;
- if (this.v.length === 0) {
- return new Sk.builtin.str(nm + "()");
- }
- bits = [];
- for (i = 0; i < this.v.length; ++i) {
- bits[i] = flds[i] + "=" + Sk.misceval.objectRepr(this.v[i]).v;
- }
- ret = bits.join(", ");
- if (this.v.length === 1) {
- ret += ",";
- }
- return new Sk.builtin.str(nm + "(" + ret + ")");
- };
- cons.prototype.tp$setattr = function (name, value) {
- throw new Sk.builtin.AttributeError("readonly property");
- };
- cons.prototype.tp$getattr = function (name) {
- var i = flds.indexOf(name);
- if (i >= 0) {
- return this.v[i];
- } else {
- return Sk.builtin.object.prototype.GenericGetAttr(name);
- }
- };
- return cons;
- };
- goog.exportSymbol("Sk.builtin.make_structseq", Sk.builtin.make_structseq);
|