aboutsummaryrefslogtreecommitdiff
path: root/node_modules/stylus/lib/stack
diff options
context:
space:
mode:
authorruki <waruqi@gmail.com>2018-11-08 00:38:48 +0800
committerruki <waruqi@gmail.com>2018-11-07 21:53:09 +0800
commit26105034da4fcce7ac883c899d781f016559310d (patch)
treec459a5dc4e3aa0972d9919033ece511ce76dd129 /node_modules/stylus/lib/stack
parent2c77f00f1a7ecb6c8192f9c16d3b2001b254a107 (diff)
downloadxmake-docs-26105034da4fcce7ac883c899d781f016559310d.tar.gz
xmake-docs-26105034da4fcce7ac883c899d781f016559310d.zip
switch to vuepress
Diffstat (limited to 'node_modules/stylus/lib/stack')
-rw-r--r--node_modules/stylus/lib/stack/frame.js65
-rw-r--r--node_modules/stylus/lib/stack/index.js135
-rw-r--r--node_modules/stylus/lib/stack/scope.js53
3 files changed, 253 insertions, 0 deletions
diff --git a/node_modules/stylus/lib/stack/frame.js b/node_modules/stylus/lib/stack/frame.js
new file mode 100644
index 00000000..ce3117d5
--- /dev/null
+++ b/node_modules/stylus/lib/stack/frame.js
@@ -0,0 +1,65 @@
+
+/*!
+ * Stylus - stack - Frame
+ * Copyright (c) Automattic <developer.wordpress.com>
+ * MIT Licensed
+ */
+
+/**
+ * Module dependencies.
+ */
+
+var Scope = require('./scope');
+
+/**
+ * Initialize a new `Frame` with the given `block`.
+ *
+ * @param {Block} block
+ * @api private
+ */
+
+var Frame = module.exports = function Frame(block) {
+ this._scope = false === block.scope
+ ? null
+ : new Scope;
+ this.block = block;
+};
+
+/**
+ * Return this frame's scope or the parent scope
+ * for scope-less blocks.
+ *
+ * @return {Scope}
+ * @api public
+ */
+
+Frame.prototype.__defineGetter__('scope', function(){
+ return this._scope || this.parent.scope;
+});
+
+/**
+ * Lookup the given local variable `name`.
+ *
+ * @param {String} name
+ * @return {Node}
+ * @api private
+ */
+
+Frame.prototype.lookup = function(name){
+ return this.scope.lookup(name)
+};
+
+/**
+ * Custom inspect.
+ *
+ * @return {String}
+ * @api public
+ */
+
+Frame.prototype.inspect = function(){
+ return '[Frame '
+ + (false === this.block.scope
+ ? 'scope-less'
+ : this.scope.inspect())
+ + ']';
+};
diff --git a/node_modules/stylus/lib/stack/index.js b/node_modules/stylus/lib/stack/index.js
new file mode 100644
index 00000000..9e288c62
--- /dev/null
+++ b/node_modules/stylus/lib/stack/index.js
@@ -0,0 +1,135 @@
+
+/*!
+ * Stylus - Stack
+ * Copyright (c) Automattic <developer.wordpress.com>
+ * MIT Licensed
+ */
+
+/**
+ * Initialize a new `Stack`.
+ *
+ * @api private
+ */
+
+var Stack = module.exports = function Stack() {
+ Array.apply(this, arguments);
+};
+
+/**
+ * Inherit from `Array.prototype`.
+ */
+
+Stack.prototype.__proto__ = Array.prototype;
+
+/**
+ * Push the given `frame`.
+ *
+ * @param {Frame} frame
+ * @api public
+ */
+
+Stack.prototype.push = function(frame){
+ frame.stack = this;
+ frame.parent = this.currentFrame;
+ return [].push.apply(this, arguments);
+};
+
+/**
+ * Return the current stack `Frame`.
+ *
+ * @return {Frame}
+ * @api private
+ */
+
+Stack.prototype.__defineGetter__('currentFrame', function(){
+ return this[this.length - 1];
+});
+
+/**
+ * Lookup stack frame for the given `block`.
+ *
+ * @param {Block} block
+ * @return {Frame}
+ * @api private
+ */
+
+Stack.prototype.getBlockFrame = function(block){
+ for (var i = 0; i < this.length; ++i) {
+ if (block == this[i].block) {
+ return this[i];
+ }
+ }
+};
+
+/**
+ * Lookup the given local variable `name`, relative
+ * to the lexical scope of the current frame's `Block`.
+ *
+ * When the result of a lookup is an identifier
+ * a recursive lookup is performed, defaulting to
+ * returning the identifier itself.
+ *
+ * @param {String} name
+ * @return {Node}
+ * @api private
+ */
+
+Stack.prototype.lookup = function(name){
+ var block = this.currentFrame.block
+ , val
+ , ret;
+
+ do {
+ var frame = this.getBlockFrame(block);
+ if (frame && (val = frame.lookup(name))) {
+ return val;
+ }
+ } while (block = block.parent);
+};
+
+/**
+ * Custom inspect.
+ *
+ * @return {String}
+ * @api private
+ */
+
+Stack.prototype.inspect = function(){
+ return this.reverse().map(function(frame){
+ return frame.inspect();
+ }).join('\n');
+};
+
+/**
+ * Return stack string formatted as:
+ *
+ * at <context> (<filename>:<lineno>:<column>)
+ *
+ * @return {String}
+ * @api private
+ */
+
+Stack.prototype.toString = function(){
+ var block
+ , node
+ , buf = []
+ , location
+ , len = this.length;
+
+ while (len--) {
+ block = this[len].block;
+ if (node = block.node) {
+ location = '(' + node.filename + ':' + (node.lineno + 1) + ':' + node.column + ')';
+ switch (node.nodeName) {
+ case 'function':
+ buf.push(' at ' + node.name + '() ' + location);
+ break;
+ case 'group':
+ buf.push(' at "' + node.nodes[0].val + '" ' + location);
+ break;
+ }
+ }
+ }
+
+ return buf.join('\n');
+};
diff --git a/node_modules/stylus/lib/stack/scope.js b/node_modules/stylus/lib/stack/scope.js
new file mode 100644
index 00000000..aeda4cf0
--- /dev/null
+++ b/node_modules/stylus/lib/stack/scope.js
@@ -0,0 +1,53 @@
+
+/*!
+ * Stylus - stack - Scope
+ * Copyright (c) Automattic <developer.wordpress.com>
+ * MIT Licensed
+ */
+
+/**
+ * Initialize a new `Scope`.
+ *
+ * @api private
+ */
+
+var Scope = module.exports = function Scope() {
+ this.locals = {};
+};
+
+/**
+ * Add `ident` node to the current scope.
+ *
+ * @param {Ident} ident
+ * @api private
+ */
+
+Scope.prototype.add = function(ident){
+ this.locals[ident.name] = ident.val;
+};
+
+/**
+ * Lookup the given local variable `name`.
+ *
+ * @param {String} name
+ * @return {Node}
+ * @api private
+ */
+
+Scope.prototype.lookup = function(name){
+ return this.locals[name];
+};
+
+/**
+ * Custom inspect.
+ *
+ * @return {String}
+ * @api public
+ */
+
+Scope.prototype.inspect = function(){
+ var keys = Object.keys(this.locals).map(function(key){ return '@' + key; });
+ return '[Scope'
+ + (keys.length ? ' ' + keys.join(', ') : '')
+ + ']';
+};