This commit is contained in:
Ben 2013-09-24 21:12:02 -07:00
commit e6b7cc134b

View File

@ -79,11 +79,12 @@ function OutputStream(options) {
while (code.length < 4) code = "0" + code;
return "\\u" + code;
}
});
}).replace(/\x0B/g, "\\x0B");
};
function make_string(str) {
var dq = 0, sq = 0;
str = str.replace(/[\\\b\f\n\r\t\x22\x27\u2028\u2029\0]/g, function(s){
switch (s) {
case "\\": return "\\\\";
@ -277,12 +278,48 @@ function OutputStream(options) {
var add_mapping = options.source_map ? function(token, name) {
try {
if (token) options.source_map.add(
token.file || "?",
current_line, current_col,
token.line, token.col,
(!name && token.type == "name") ? token.value : name
);
if (token) {
var remainder = 0;
var offset = 0;
var tokenName;
var tokenChars;
var escapable = [
{find:'\n', replace:'\\n'},
{find:'\r', replace:'\\r'},
{find:'\t', replace:'\\t'},
{find:'\u2028', replace:'\\u2028'},
{find:'\u2029', replace:'\\u2029'}
];
tokenName = (!name && token.type == "name") ? token.value : name;
if(tokenName) {
// Cast to a string, it might be a number
tokenName = new String(tokenName);
// Fixes offsets for escaped chars in keys of object literals
tokenChars = tokenName.split('');
for(var i=0, ii=tokenChars.length; i<ii; i++) {
for(var y=0, yy=escapable.length; y<yy; y++) {
if(tokenChars[i] === escapable[y].find && (i===0 || tokenChars[i-1] != '\\')) {
tokenChars[i] = escapable[y].replace;
}
}
}
tokenName = tokenChars.join('')
// Fixes offsets for quoted keys of object literals
remainder = token.endpos - token.pos - tokenName.length;
offset = remainder === 0 ? 0 : remainder/2;
}
options.source_map.add(
token.file || "?",
current_line, current_col,
token.line, token.col + offset,
tokenName
);
}
} catch(ex) {
AST_Node.warn("Couldn't figure out mapping for {file}:{line},{col} → {cline},{ccol} [{name}]", {
file: token.file,