Skip to content

Commit

Permalink
Refactored render()
Browse files Browse the repository at this point in the history
  • Loading branch information
tj committed Jul 27, 2010
1 parent c7247bc commit 11d2bc1
Showing 1 changed file with 40 additions and 41 deletions.
81 changes: 40 additions & 41 deletions lib/jade.js
Expand Up @@ -704,6 +704,43 @@ function interpolate(str){
});
}

function rethrow(err, str, filename, lineno){
var start = lineno - 3 > 0
? lineno - 3
: 0;
// Error context
var context = str.split('\n').slice(start, lineno).map(function(line, i){
return ' ' + (i + start + 1) + '. ' + sys.inspect(line);
}).join('\n');

// Alter exception message
err.path = filename;
err.message = (filename || 'Jade') + ':' + lineno
+ '\n' + context + '\n\n' + err.message;
throw err;
}

function parse(str, options){
var filename = options.filename;
try {
var parser = new Parser(str, filename);
if (options.debug) {
parser.debug();
parser = new Parser(str, filename);
}
var js = parser.parse();
if (options.debug) sys.puts('\nfunction:', js.replace(/^/gm, ' '));
try {
return new Function('locals, attrs, escape, _', 'with (locals) {' + js + '}');
} catch (err) {
process.compile(js, filename || 'Jade');
return;
}
} catch (err) {
rethrow(err, str, filename, parser.lineno);
}
}

/**
* Render the given `str` of jade.
*
Expand All @@ -725,57 +762,19 @@ exports.render = function(str, options){
options = options || {},
filename = options.filename;

// Attempt to parse
function parse(){
try {
var parser = new Parser(str, filename);
if (options.debug) {
parser.debug();
parser = new Parser(str, filename);
}
var js = parser.parse();
if (options.debug) sys.puts('\nfunction:', js.replace(/^/gm, ' '));
try {
return new Function('locals, attrs, escape, _', 'with (locals) {' + js + '}');
} catch (err) {
process.compile(js, filename || 'Jade');
return;
}
} catch (err) {
rethrow(err, parser.lineno);
}
}

// Re-throw the given error
function rethrow(err, lineno){
var start = lineno - 3 > 0
? lineno - 3
: 0;
// Error context
var context = str.split('\n').slice(start, lineno).map(function(line, i){
return ' ' + (i + start + 1) + '. ' + sys.inspect(line);
}).join('\n');

// Alter exception message
err.path = filename;
err.message = (filename || 'Jade') + ':' + lineno
+ '\n' + context + '\n\n' + err.message;
throw err;
}

// Cache templates
if (options.cache) {
if (filename) {
if (cache[filename]) {
fn = cache[filename];
} else {
fn = cache[filename] = parse();
fn = cache[filename] = parse(str, options);
}
} else {
throw new Error('filename is required when using the cache option');
}
} else {
fn = parse();
fn = parse(str, options);
}

try {
Expand All @@ -788,7 +787,7 @@ exports.render = function(str, options){
escape,
_);
} catch (err) {
rethrow(err, _.lineno);
rethrow(err, str, filename, _.lineno);
}
};

Expand Down

0 comments on commit 11d2bc1

Please sign in to comment.