(function(mod){if(typeof exports=="object"&&typeof module=="object") 
return mod(exports);if(typeof define=="function"&&define.amd) 
return define(["exports"],mod);mod(tern.comment||(tern.comment={}));})(function(exports){function isSpace(ch){return(ch<14&&ch>8)||ch===32||ch===160;}
function onOwnLine(text,pos){for(;pos>0;--pos){var ch=text.charCodeAt(pos-1);if(ch==10)break;if(!isSpace(ch))return false;}
return true;} 
exports.commentsBefore=function(text,pos){var found=null,emptyLines=0,topIsLineComment;out:while(pos>0){var prev=text.charCodeAt(pos-1);if(prev==10){for(var scan=--pos,sawNonWS=false;scan>0;--scan){prev=text.charCodeAt(scan-1);if(prev==47&&text.charCodeAt(scan-2)==47){if(!onOwnLine(text,scan-2))break out;var content=text.slice(scan,pos);if(!emptyLines&&topIsLineComment)found[0]=content+"\n"+found[0];else(found||(found=[])).unshift(content);topIsLineComment=true;emptyLines=0;pos=scan-2;break;}else if(prev==10){if(!sawNonWS&&++emptyLines>1)break out;break;}else if(!sawNonWS&&!isSpace(prev)){sawNonWS=true;}}}else if(prev==47&&text.charCodeAt(pos-2)==42){for(var scan=pos-2;scan>1;--scan){if(text.charCodeAt(scan-1)==42&&text.charCodeAt(scan-2)==47){if(!onOwnLine(text,scan-2))break out;(found||(found=[])).unshift(text.slice(scan,pos-2));topIsLineComment=false;emptyLines=0;break;}}
pos=scan-2;}else if(isSpace(prev)){--pos;}else{break;}}
return found;};exports.commentAfter=function(text,pos){while(pos<text.length){var next=text.charCodeAt(pos);if(next==47){var after=text.charCodeAt(pos+1),end;if(after==47) 
end=text.indexOf("\n",pos+2);else if(after==42) 
end=text.indexOf("*/",pos+2);else
return;return text.slice(pos+2,end<0?text.length:end);}else if(isSpace(next)){++pos;}}};exports.ensureCommentsBefore=function(text,node){if(node.hasOwnProperty("commentsBefore"))return node.commentsBefore;return node.commentsBefore=exports.commentsBefore(text,node.start);};});