123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478 |
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="utf-8">
- <title>JSDoc: Source: object.js</title>
- <script src="scripts/prettify/prettify.js"> </script>
- <script src="scripts/prettify/lang-css.js"> </script>
- <!--[if lt IE 9]>
- <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
- <![endif]-->
- <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
- <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
- </head>
- <body>
- <div id="main">
- <h1 class="page-title">Source: object.js</h1>
-
-
- <section>
- <article>
- <pre class="prettyprint source linenums"><code>/**
- * @constructor
- * Sk.builtin.object
- *
- * @description
- * Constructor for Python object. All Python classes (builtin and user-defined)
- * should inherit from this class.
- *
- * @return {Sk.builtin.object} Python object
- */
- Sk.builtin.object = function () {
- if (!(this instanceof Sk.builtin.object)) {
- return new Sk.builtin.object();
- }
- return this;
- };
- /**
- * @return {undefined}
- */
- Sk.builtin.object.prototype.GenericGetAttr = function (name) {
- var res;
- var f;
- var descr;
- var tp;
- var dict;
- var pyName = new Sk.builtin.str(name);
- goog.asserts.assert(typeof name === "string");
- tp = this.ob$type;
- goog.asserts.assert(tp !== undefined, "object has no ob$type!");
- dict = this["$d"] || this.constructor["$d"];
- // todo; assert? force?
- if (dict) {
- if (dict.mp$lookup) {
- res = dict.mp$lookup(pyName);
- } else if (dict.mp$subscript) {
- try {
- res = dict.mp$subscript(pyName);
- } catch (x) {
- res = undefined;
- }
- } else if (typeof dict === "object") {
- // todo; definitely the wrong place for this. other custom tp$getattr won't work on object -- bnm -- implemented custom __getattr__ in abstract.js
- res = dict[name];
- }
- if (res !== undefined) {
- return res;
- }
- }
- descr = Sk.builtin.type.typeLookup(tp, name);
- // otherwise, look in the type for a descr
- if (descr !== undefined && descr !== null && descr.ob$type !== undefined) {
- f = descr.ob$type.tp$descr_get;
- // todo;
- //if (f && descr.tp$descr_set) // is a data descriptor if it has a set
- //return f.call(descr, this, this.ob$type);
- }
- if (f) {
- // non-data descriptor
- return f.call(descr, this, this.ob$type);
- }
- if (descr !== undefined) {
- return descr;
- }
- return undefined;
- };
- goog.exportSymbol("Sk.builtin.object.prototype.GenericGetAttr", Sk.builtin.object.prototype.GenericGetAttr);
- Sk.builtin.object.prototype.GenericPythonGetAttr = function(self, name) {
- return Sk.builtin.object.prototype.GenericGetAttr.call(self, name.v);
- };
- goog.exportSymbol("Sk.builtin.object.prototype.GenericPythonGetAttr", Sk.builtin.object.prototype.GenericPythonGetAttr);
- Sk.builtin.object.prototype.GenericSetAttr = function (name, value) {
- var objname = Sk.abstr.typeName(this);
- var pyname;
- var dict;
- goog.asserts.assert(typeof name === "string");
- // todo; lots o' stuff
- dict = this["$d"] || this.constructor["$d"];
- if (dict.mp$ass_subscript) {
- pyname = new Sk.builtin.str(name);
- if (this instanceof Sk.builtin.object && !(this.ob$type.sk$klass) &&
- dict.mp$lookup(pyname) === undefined) {
- // Cannot add new attributes to a builtin object
- throw new Sk.builtin.AttributeError("'" + objname + "' object has no attribute '" + name + "'");
- }
- dict.mp$ass_subscript(new Sk.builtin.str(name), value);
- } else if (typeof dict === "object") {
- dict[name] = value;
- }
- };
- goog.exportSymbol("Sk.builtin.object.prototype.GenericSetAttr", Sk.builtin.object.prototype.GenericSetAttr);
- Sk.builtin.object.prototype.GenericPythonSetAttr = function(self, name, value) {
- return Sk.builtin.object.prototype.GenericSetAttr.call(self, name.v, value);
- };
- goog.exportSymbol("Sk.builtin.object.prototype.GenericPythonSetAttr", Sk.builtin.object.prototype.GenericPythonSetAttr);
- Sk.builtin.object.prototype.HashNotImplemented = function () {
- throw new Sk.builtin.TypeError("unhashable type: '" + Sk.abstr.typeName(this) + "'");
- };
- Sk.builtin.object.prototype.tp$getattr = Sk.builtin.object.prototype.GenericGetAttr;
- Sk.builtin.object.prototype.tp$setattr = Sk.builtin.object.prototype.GenericSetAttr;
- // Although actual attribute-getting happens in pure Javascript via tp$getattr, classes
- // overriding __getattr__ etc need to be able to call object.__getattr__ etc from Python
- Sk.builtin.object.prototype["__getattr__"] = Sk.builtin.object.prototype.GenericPythonGetAttr;
- Sk.builtin.object.prototype["__setattr__"] = Sk.builtin.object.prototype.GenericPythonSetAttr;
- /**
- * The name of this class.
- * @type {string}
- */
- Sk.builtin.object.prototype.tp$name = "object";
- /**
- * The type object of this class.
- * @type {Sk.builtin.type}
- */
- Sk.builtin.object.prototype.ob$type = Sk.builtin.type.makeIntoTypeObj("object", Sk.builtin.object);
- Sk.builtin.object.prototype.ob$type.sk$klass = undefined; // Nonsense for closure compiler
- /** Default implementations of dunder methods found in all Python objects */
- /**
- * Python wrapper for `__repr__` method.
- * @name __repr__
- * @memberOf Sk.builtin.object.prototype
- * @instance
- */
- Sk.builtin.object.prototype["__repr__"] = function (self) {
- Sk.builtin.pyCheckArgs("__repr__", arguments, 0, 0, false, true);
- return self["$r"]();
- };
- /**
- * Python wrapper for `__str__` method.
- * @name __str__
- * @memberOf Sk.builtin.object.prototype
- * @instance
- */
- Sk.builtin.object.prototype["__str__"] = function (self) {
- Sk.builtin.pyCheckArgs("__str__", arguments, 0, 0, false, true);
- return self["$r"]();
- };
- /**
- * Python wrapper for `__hash__` method.
- * @name __hash__
- * @memberOf Sk.builtin.object.prototype
- * @instance
- */
- Sk.builtin.object.prototype["__hash__"] = function (self) {
- Sk.builtin.pyCheckArgs("__hash__", arguments, 0, 0, false, true);
- return self.tp$hash();
- };
- /**
- * Python wrapper for `__eq__` method.
- * @name __eq__
- * @memberOf Sk.builtin.object.prototype
- * @instance
- */
- Sk.builtin.object.prototype["__eq__"] = function (self, other) {
- Sk.builtin.pyCheckArgs("__eq__", arguments, 1, 1, false, true);
- return self.ob$eq(other);
- };
- /**
- * Python wrapper for `__ne__` method.
- * @name __ne__
- * @memberOf Sk.builtin.object.prototype
- * @instance
- */
- Sk.builtin.object.prototype["__ne__"] = function (self, other) {
- Sk.builtin.pyCheckArgs("__ne__", arguments, 1, 1, false, true);
- return self.ob$ne(other);
- };
- /**
- * Python wrapper for `__lt__` method.
- * @name __lt__
- * @memberOf Sk.builtin.object.prototype
- * @instance
- */
- Sk.builtin.object.prototype["__lt__"] = function (self, other) {
- Sk.builtin.pyCheckArgs("__lt__", arguments, 1, 1, false, true);
- return self.ob$lt(other);
- };
- /**
- * Python wrapper for `__le__` method.
- * @name __le__
- * @memberOf Sk.builtin.object.prototype
- * @instance
- */
- Sk.builtin.object.prototype["__le__"] = function (self, other) {
- Sk.builtin.pyCheckArgs("__le__", arguments, 1, 1, false, true);
- return self.ob$le(other);
- };
- /**
- * Python wrapper for `__gt__` method.
- * @name __gt__
- * @memberOf Sk.builtin.object.prototype
- * @instance
- */
- Sk.builtin.object.prototype["__gt__"] = function (self, other) {
- Sk.builtin.pyCheckArgs("__gt__", arguments, 1, 1, false, true);
- return self.ob$gt(other);
- };
- /**
- * Python wrapper for `__ge__` method.
- * @name __ge__
- * @memberOf Sk.builtin.object.prototype
- * @instance
- */
- Sk.builtin.object.prototype["__ge__"] = function (self, other) {
- Sk.builtin.pyCheckArgs("__ge__", arguments, 1, 1, false, true);
- return self.ob$ge(other);
- };
- /** Default implementations of Javascript functions used in dunder methods */
- /**
- * Return the string representation of this instance.
- *
- * Javascript function, returns Python object.
- *
- * @name $r
- * @memberOf Sk.builtin.object.prototype
- * @return {Sk.builtin.str} The Python string representation of this instance.
- */
- Sk.builtin.object.prototype["$r"] = function () {
- return new Sk.builtin.str("<object>");
- };
- Sk.builtin.hashCount = 1;
- /**
- * Return the hash value of this instance.
- *
- * Javascript function, returns Python object.
- *
- * @return {Sk.builtin.int_} The hash value
- */
- Sk.builtin.object.prototype.tp$hash = function () {
- if (!this.$savedHash_) {
- this.$savedHash_ = new Sk.builtin.int_(Sk.builtin.hashCount++);
- }
- return this.$savedHash_;
- };
- /**
- * Perform equality check between this instance and a Python object (i.e. this == other).
- *
- * Implements `__eq__` dunder method.
- *
- * Javascript function, returns Python object.
- *
- * @param {Object} other The Python object to check for equality.
- * @return {(Sk.builtin.bool|Sk.builtin.NotImplemented)} true if equal, false otherwise
- */
- Sk.builtin.object.prototype.ob$eq = function (other) {
- if (this === other) {
- return Sk.builtin.bool.true$;
- }
- return Sk.builtin.NotImplemented.NotImplemented$;
- };
- /**
- * Perform non-equality check between this instance and a Python object (i.e. this != other).
- *
- * Implements `__ne__` dunder method.
- *
- * Javascript function, returns Python object.
- *
- * @param {Object} other The Python object to check for non-equality.
- * @return {(Sk.builtin.bool|Sk.builtin.NotImplemented)} true if not equal, false otherwise
- */
- Sk.builtin.object.prototype.ob$ne = function (other) {
- if (this === other) {
- return Sk.builtin.bool.false$;
- }
- return Sk.builtin.NotImplemented.NotImplemented$;
- };
- /**
- * Determine if this instance is less than a Python object (i.e. this < other).
- *
- * Implements `__lt__` dunder method.
- *
- * Javascript function, returns Python object.
- *
- * @param {Object} other The Python object to compare.
- * @return {(Sk.builtin.bool|Sk.builtin.NotImplemented)} true if this < other, false otherwise
- */
- Sk.builtin.object.prototype.ob$lt = function (other) {
- return Sk.builtin.NotImplemented.NotImplemented$;
- };
- /**
- * Determine if this instance is less than or equal to a Python object (i.e. this <= other).
- *
- * Implements `__le__` dunder method.
- *
- * Javascript function, returns Python object.
- *
- * @param {Object} other The Python object to compare.
- * @return {(Sk.builtin.bool|Sk.builtin.NotImplemented)} true if this <= other, false otherwise
- */
- Sk.builtin.object.prototype.ob$le = function (other) {
- return Sk.builtin.NotImplemented.NotImplemented$;
- };
- /**
- * Determine if this instance is greater than a Python object (i.e. this > other).
- *
- * Implements `__gt__` dunder method.
- *
- * Javascript function, returns Python object.
- *
- * @param {Object} other The Python object to compare.
- * @return {(Sk.builtin.bool|Sk.builtin.NotImplemented)} true if this > other, false otherwise
- */
- Sk.builtin.object.prototype.ob$gt = function (other) {
- return Sk.builtin.NotImplemented.NotImplemented$;
- };
- /**
- * Determine if this instance is greater than or equal to a Python object (i.e. this >= other).
- *
- * Implements `__ge__` dunder method.
- *
- * Javascript function, returns Python object.
- *
- * @param {Object} other The Python object to compare.
- * @return {(Sk.builtin.bool|Sk.builtin.NotImplemented)} true if this >= other, false otherwise
- */
- Sk.builtin.object.prototype.ob$ge = function (other) {
- return Sk.builtin.NotImplemented.NotImplemented$;
- };
- // Wrap the following functions in Sk.builtin.func once that class is initialized
- /**
- * Array of all the Python functions which are methods of this class.
- * @type {Array}
- */
- Sk.builtin.object.pythonFunctions = ["__repr__", "__str__", "__hash__",
- "__eq__", "__ne__", "__lt__", "__le__", "__gt__", "__ge__", "__getattr__", "__setattr__"];
- /**
- * @constructor
- * Sk.builtin.none
- *
- * @extends {Sk.builtin.object}
- */
- Sk.builtin.none = function () {
- this.v = null;
- };
- Sk.abstr.setUpInheritance("NoneType", Sk.builtin.none, Sk.builtin.object);
- /** @override */
- Sk.builtin.none.prototype["$r"] = function () { return new Sk.builtin.str("None"); };
- /** @override */
- Sk.builtin.none.prototype.tp$hash = function () {
- return new Sk.builtin.int_(0);
- };
- /**
- * Python None constant.
- * @type {Sk.builtin.none}
- */
- Sk.builtin.none.none$ = new Sk.builtin.none();
- /**
- * @constructor
- * Sk.builtin.NotImplemented
- *
- * @extends {Sk.builtin.object}
- */
- Sk.builtin.NotImplemented = function() { };
- Sk.abstr.setUpInheritance("NotImplementedType", Sk.builtin.NotImplemented, Sk.builtin.object);
- /** @override */
- Sk.builtin.NotImplemented.prototype["$r"] = function () { return new Sk.builtin.str("NotImplemented"); };
- /**
- * Python NotImplemented constant.
- * @type {Sk.builtin.NotImplemented}
- */
- Sk.builtin.NotImplemented.NotImplemented$ = new Sk.builtin.NotImplemented();
- goog.exportSymbol("Sk.builtin.none", Sk.builtin.none);
- goog.exportSymbol("Sk.builtin.NotImplemented", Sk.builtin.NotImplemented);
- </code></pre>
- </article>
- </section>
- </div>
- <nav>
- <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="Sk.abstr.iter-seqIter.html">seqIter</a></li><li><a href="Sk.builtin.bool.html">bool</a></li><li><a href="Sk.builtin.float_.html">float_</a></li><li><a href="Sk.builtin.func.html">func</a></li><li><a href="Sk.builtin.int_.html">int_</a></li><li><a href="Sk.builtin.none.html">none</a></li><li><a href="Sk.builtin.NotImplemented.html">NotImplemented</a></li><li><a href="Sk.builtin.numtype.html">numtype</a></li><li><a href="Sk.builtin.object.html">object</a></li><li><a href="Sk.builtin.seqtype.html">seqtype</a></li><li><a href="Sk.misceval.Suspension.html">Suspension</a></li></ul><h3>Namespaces</h3><ul><li><a href="Sk.html">Sk</a></li><li><a href="Sk.abstr.html">abstr</a></li><li><a href="Sk.builtin.html">builtin</a></li><li><a href="Sk.ffi.html">ffi</a></li><li><a href="Sk.misceval.html">misceval</a></li></ul>
- </nav>
- <br class="clear">
- <footer>
- Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.3.0</a> on Thu Aug 13 2015 08:14:27 GMT-0500 (CDT)
- </footer>
- <script> prettyPrint(); </script>
- <script src="scripts/linenumber.js"> </script>
- </body>
- </html>
|