eturn obj['__id'];
					},

					// Deep clone a language definition (e.g. to extend it)
					clone: function (o) {
						var type = _.util.type(o);

						switch (type) {
							case 'Object':
								var clone = {};

								for (var key in o) {
									if (o.hasOwnProperty(key)) {
										clone[key] = _.util.clone(o[key]);
									}
								}

								return clone;

							case 'Array':
								// Check for existence for IE8
								return o.map && o.map(function(v) { return _.util.clone(v); });
				