Browse Source

Source maps cleaned up

rsredsq 10 years ago
parent
commit
8901ea864d

+ 8 - 1
Resources/EditorData/AtomicEditor/Script/jsutils.js

@@ -1,5 +1,6 @@
 __atomic_acorn = require('./acorn');
 __atomic_beautify = require('./beautify');
+__atomic_sourceMapHelper = require('./source-map');
 
 exports.parseToJSON = function (source) {
 
@@ -37,7 +38,6 @@ exports.parseErrorCheck = function(source) {
 
 
 	try {
-
 		__atomic_acorn.parse( source, {
 	    	ranges: true,
 	    	locations: true,
@@ -65,3 +65,10 @@ exports.jsBeautify = function (source) {
 	return __atomic_beautify.js_beautify(source);
 
 }
+
+exports.getRealLineNumber = function (map, line) {
+    var jsonMap = JSON.parse(map);
+    var smc = new __atomic_sourceMapHelper.SourceMapConsumer(jsonMap);
+    var pos = smc.originalPositionFor({line: line, column: 100000});
+    return pos.line;
+}

+ 1 - 0
Script/AtomicEditor/utils/SourceMapHelper.js → Resources/EditorData/AtomicEditor/Script/source-map.js

@@ -1,4 +1,5 @@
 function getSourceLine(map, line) {
+    console.log("ASDDDDDDDDDDD");
     var jsonMap = JSON.parse(map);
     var smc = new sourceMap.SourceMapConsumer(jsonMap);
     var pos = smc.originalPositionFor({line: line, column: 100000});

+ 3 - 3
Source/AtomicEditor/Application/AEEditorApp.cpp

@@ -153,14 +153,14 @@ void AEEditorApp::HandleExitRequested(StringHash eventType, VariantMap& eventDat
 void AEEditorApp::HandleJSError(StringHash eventType, VariantMap& eventData)
 {
     using namespace JSError;
-    int errLineNumber = vm_->GetRealLineNumber(eventData);
     //String errName = eventData[P_ERRORNAME].GetString();
     String errMessage = eventData[P_ERRORMESSAGE].GetString();
     String errFilename = eventData[P_ERRORFILENAME].GetString();
     //String errStack = eventData[P_ERRORSTACK].GetString();
-    //int errLineNumber = eventData[P_ERRORLINENUMBER].GetInt();
+    int errLineNumber = eventData[P_ERRORLINENUMBER].GetInt();
+    int errRealLineNumber = vm_->GetRealLineNumber("AtomicEditor/out/" + errFilename, errLineNumber);
 
-    String errorString = ToString("%s - %s - Line: %i", errFilename.CString(), errMessage.CString(), errLineNumber);
+    String errorString = ToString("%s - %s - Line: %i", errFilename.CString(), errMessage.CString(), errRealLineNumber);
 
 
     ErrorExit(errorString);

+ 28 - 19
Source/AtomicJS/Javascript/JSVM.cpp

@@ -247,29 +247,38 @@ void JSVM::SendJSErrorEvent(const String& filename)
 
 }
 
-int JSVM::GetRealLineNumber(VariantMap& eventData) {
-
-    SharedPtr<File> file(GetSubsystem<ResourceCache>()->GetFile("AtomicEditor/utils/SourceMapHelper.js"));
-
-    String source;
-
-    file->ReadText(source);
-
-    duk_push_string(ctx_, source.CString());
-    duk_peval(ctx_);
-    duk_pop(ctx_);
-    String fileName = eventData[JSError::P_ERRORFILENAME].GetString();
+int JSVM::GetRealLineNumber(const String& fileName, const int lineNumber) {
+    int realLineNumber = -1;
     String map;
-    SharedPtr<File> mapFile(GetSubsystem<ResourceCache>()->GetFile("AtomicEditor/out/" + fileName + ".js.map"));
+    String path = fileName;
+    if (!path.EndsWith(".js.map"))
+        path += ".js.map";
+    SharedPtr<File> mapFile(GetSubsystem<ResourceCache>()->GetFile(path));
     mapFile->ReadText(map);
-    int lineNumber = eventData[JSError::P_ERRORLINENUMBER].GetInt();
-    duk_push_global_object(ctx_);
-    duk_get_prop_string(ctx_, -1 /*index*/, "getSourceLine");
+    int top = duk_get_top(ctx_);
+    duk_get_global_string(ctx_, "require");
+    duk_push_string(ctx_, "AtomicEditor/Script/jsutils");
+    if (duk_pcall(ctx_, 1))
+    {
+        printf("Error: %s\n", duk_safe_to_string(ctx_, -1));
+        duk_set_top(ctx_, top);
+        return false;
+    }
+
+    duk_get_prop_string(ctx_, -1, "getRealLineNumber");
     duk_push_string(ctx_, map.CString());
     duk_push_int(ctx_, lineNumber);
-    duk_pcall(ctx_, 2 /*nargs*/);
-    int realLineNumber = duk_to_int(ctx_, -1);
-    duk_pop(ctx_);
+    bool ok = true;
+    if (duk_pcall(ctx_, 2))
+    {
+        ok = false;
+        printf("Error: %s\n", duk_safe_to_string(ctx_, -1));
+    }
+    else
+    {
+        realLineNumber = duk_to_int(ctx_, -1);
+    }
+    duk_set_top(ctx_, top);
 
     return realLineNumber;
 }

+ 1 - 1
Source/AtomicJS/Javascript/JSVM.h

@@ -162,7 +162,7 @@ public:
 
     void SendJSErrorEvent(const String& filename = String::EMPTY);
 
-    int GetRealLineNumber(VariantMap& eventData);
+    int GetRealLineNumber(const String& fileName, const int lineNumber);
 
 private: