Track ending lines/columns; fix end locations in Mozilla AST.

This commit is contained in:
Ingvar Stepanyan
2014-08-08 14:15:43 +03:00
committed by Richard van Velzen
parent 6b23cbc852
commit ae5366a31d
3 changed files with 28 additions and 30 deletions

View File

@@ -84,7 +84,7 @@ function DEFNODE(type, props, methods, base) {
return ctor;
};
var AST_Token = DEFNODE("Token", "type value line col pos endpos nlb comments_before file", {
var AST_Token = DEFNODE("Token", "type value line col pos endline endcol endpos nlb comments_before file", {
}, null);
var AST_Node = DEFNODE("Node", "start end", {

View File

@@ -370,26 +370,28 @@
/* -----[ tools ]----- */
function my_start_token(moznode) {
var loc = moznode.loc;
var loc = moznode.loc, start = loc && loc.start;
var range = moznode.range;
return new AST_Token({
file : loc && loc.source,
line : loc && loc.start.line,
col : loc && loc.start.column,
line : start && start.line,
col : start && start.column,
pos : range ? range[0] : moznode.start,
endpos : range ? range[0] : moznode.start
});
};
function my_end_token(moznode) {
var loc = moznode.loc;
var loc = moznode.loc, end = loc && loc.end;
var range = moznode.range;
return new AST_Token({
file : loc && loc.source,
line : loc && loc.end.line,
col : loc && loc.end.column,
pos : range ? range[1] : moznode.end,
endpos : range ? range[1] : moznode.end
file : loc && loc.source,
line : end && end.line,
col : end && end.column,
pos : range ? range[1] : moznode.end,
endline : end && end.line,
endcol : end && end.column,
endpos : range ? range[1] : moznode.end
});
};
@@ -465,23 +467,16 @@
return ast;
};
function moz_sub_loc(token) {
return token.line ? {
line: token.line,
column: token.col
} : null;
};
function set_moz_loc(mynode, moznode) {
function set_moz_loc(mynode, moznode, myparent) {
var start = mynode.start;
var end = mynode.end;
if (start.pos != null && end.pos != null) {
moznode.range = [start.pos, end.pos];
if (start.pos != null && end.endpos != null) {
moznode.range = [start.pos, end.endpos];
}
if (start.line) {
moznode.loc = {
start: moz_sub_loc(start),
end: moz_sub_loc(end)
start: {line: start.line, column: start.col},
end: end.endline ? {line: end.endline, column: end.endcol} : null
};
if (start.file) {
moznode.loc.source = start.file;

View File

@@ -267,14 +267,16 @@ function tokenizer($TEXT, filename, html5_comments) {
(type == "punc" && PUNC_BEFORE_EXPRESSION(value)));
prev_was_dot = (type == "punc" && value == ".");
var ret = {
type : type,
value : value,
line : S.tokline,
col : S.tokcol,
pos : S.tokpos,
endpos : S.pos,
nlb : S.newline_before,
file : filename
type : type,
value : value,
line : S.tokline,
col : S.tokcol,
pos : S.tokpos,
endline : S.line,
endcol : S.col,
endpos : S.pos,
nlb : S.newline_before,
file : filename
};
if (!is_comment) {
ret.comments_before = S.comments_before;
@@ -397,6 +399,7 @@ function tokenizer($TEXT, filename, html5_comments) {
ret = S.text.substring(S.pos, i);
S.pos = i;
}
S.col = S.tokcol + (S.pos - S.tokpos);
S.comments_before.push(token(type, ret, true));
S.regex_allowed = regex_allowed;
return next_token();