summaryrefslogtreecommitdiff
path: root/cli/source_maps.rs
diff options
context:
space:
mode:
Diffstat (limited to 'cli/source_maps.rs')
-rw-r--r--cli/source_maps.rs82
1 files changed, 53 insertions, 29 deletions
diff --git a/cli/source_maps.rs b/cli/source_maps.rs
index 318665e9d..26ba4ca29 100644
--- a/cli/source_maps.rs
+++ b/cli/source_maps.rs
@@ -33,14 +33,15 @@ pub fn apply_source_map<G: SourceMapGetter>(
// prepareStackTrace().
let mut mappings_map: CachedMaps = HashMap::new();
- let (script_resource_name, line_number, start_column) =
+ let (script_resource_name, line_number, start_column, source_line) =
get_maybe_orig_position(
js_error.script_resource_name.clone(),
js_error.line_number,
// start_column is 0-based, we need 1-based here.
js_error.start_column.map(|n| n + 1),
+ js_error.source_line.clone(),
&mut mappings_map,
- getter.clone(),
+ getter,
);
let start_column = start_column.map(|n| n - 1);
// It is better to just move end_column to be the same distance away from
@@ -56,20 +57,6 @@ pub fn apply_source_map<G: SourceMapGetter>(
}
_ => None,
};
- // if there is a source line that we might be different in the source file, we
- // will go fetch it from the getter
- let source_line = match line_number {
- Some(ln)
- if js_error.source_line.is_some() && script_resource_name.is_some() =>
- {
- getter.get_source_line(
- &js_error.script_resource_name.clone().unwrap(),
- // Getter expects 0-based line numbers, but ours are 1-based.
- ln as usize - 1,
- )
- }
- _ => js_error.source_line.clone(),
- };
JsError {
message: js_error.message.clone(),
@@ -87,16 +74,29 @@ fn get_maybe_orig_position<G: SourceMapGetter>(
file_name: Option<String>,
line_number: Option<i64>,
column_number: Option<i64>,
+ source_line: Option<String>,
mappings_map: &mut CachedMaps,
getter: Arc<G>,
-) -> (Option<String>, Option<i64>, Option<i64>) {
+) -> (Option<String>, Option<i64>, Option<i64>, Option<String>) {
match (file_name, line_number, column_number) {
(Some(file_name_v), Some(line_v), Some(column_v)) => {
- let (file_name, line_number, column_number) =
- get_orig_position(file_name_v, line_v, column_v, mappings_map, getter);
- (Some(file_name), Some(line_number), Some(column_number))
+ let (file_name, line_number, column_number, source_line) =
+ get_orig_position(
+ file_name_v,
+ line_v,
+ column_v,
+ source_line,
+ mappings_map,
+ getter,
+ );
+ (
+ Some(file_name),
+ Some(line_number),
+ Some(column_number),
+ source_line,
+ )
}
- _ => (None, None, None),
+ _ => (None, None, None, source_line),
}
}
@@ -104,11 +104,13 @@ pub fn get_orig_position<G: SourceMapGetter>(
file_name: String,
line_number: i64,
column_number: i64,
+ source_line: Option<String>,
mappings_map: &mut CachedMaps,
getter: Arc<G>,
-) -> (String, i64, i64) {
- let maybe_source_map = get_mappings(&file_name, mappings_map, getter);
- let default_pos = (file_name, line_number, column_number);
+) -> (String, i64, i64, Option<String>) {
+ let maybe_source_map = get_mappings(&file_name, mappings_map, getter.clone());
+ let default_pos =
+ (file_name, line_number, column_number, source_line.clone());
// Lookup expects 0-based line and column numbers, but ours are 1-based.
let line_number = line_number - 1;
@@ -121,11 +123,33 @@ pub fn get_orig_position<G: SourceMapGetter>(
None => default_pos,
Some(token) => match token.get_source() {
None => default_pos,
- Some(original) => (
- original.to_string(),
- i64::from(token.get_src_line()) + 1,
- i64::from(token.get_src_col()) + 1,
- ),
+ Some(original) => {
+ let maybe_source_line =
+ if let Some(source_view) = token.get_source_view() {
+ source_view.get_line(token.get_src_line())
+ } else {
+ None
+ };
+
+ let source_line = if let Some(source_line) = maybe_source_line {
+ Some(source_line.to_string())
+ } else if let Some(source_line) = getter.get_source_line(
+ original,
+ // Getter expects 0-based line numbers, but ours are 1-based.
+ token.get_src_line() as usize,
+ ) {
+ Some(source_line)
+ } else {
+ source_line
+ };
+
+ (
+ original.to_string(),
+ i64::from(token.get_src_line()) + 1,
+ i64::from(token.get_src_col()) + 1,
+ source_line,
+ )
+ }
},
}
}