Skip to content

Commit 4712734

Browse files
committed
In MsieJsEngine class was added overloaded versions of the Evaluate, Evaluate<T> and Execute methods, which take the document name as second parameter
1 parent b49533c commit 4712734

File tree

6 files changed

+137
-16
lines changed

6 files changed

+137
-16
lines changed

src/MsieJavaScriptEngine/ActiveScript/ActiveScriptJsEngineBase.cs

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -374,8 +374,9 @@ private T InvokeScript<T>(Func<T> func)
374374
/// </summary>
375375
/// <param name="code">Script text</param>
376376
/// <param name="isExpression">Flag that script text needs to run as an expression</param>
377+
/// <param name="documentName">Document name</param>
377378
/// <returns>Result of the execution</returns>
378-
private object InnerExecute(string code, bool isExpression)
379+
private object InnerExecute(string code, bool isExpression, string documentName)
379380
{
380381
object result;
381382

@@ -685,17 +686,27 @@ public string Mode
685686

686687
public object Evaluate(string expression)
687688
{
688-
object result = InvokeScript(() => InnerExecute(expression, true));
689+
return Evaluate(expression, string.Empty);
690+
}
691+
692+
public object Evaluate(string expression, string documentName)
693+
{
694+
object result = InvokeScript(() => InnerExecute(expression, true, documentName));
689695
result = MapToHostType(result);
690696

691697
return result;
692698
}
693699

694700
public void Execute(string code)
701+
{
702+
Execute(code, string.Empty);
703+
}
704+
705+
public void Execute(string code, string documentName)
695706
{
696707
InvokeScript(() =>
697708
{
698-
InnerExecute(code, false);
709+
InnerExecute(code, false, documentName);
699710
});
700711
}
701712

src/MsieJavaScriptEngine/IInnerJsEngine.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,27 @@ internal interface IInnerJsEngine : IDisposable
2020
/// <returns>Result of the expression</returns>
2121
object Evaluate(string expression);
2222

23+
/// <summary>
24+
/// Evaluates an expression
25+
/// </summary>
26+
/// <param name="expression">JavaScript expression</param>
27+
/// <param name="documentName">Document name</param>
28+
/// <returns>Result of the expression</returns>
29+
object Evaluate(string expression, string documentName);
30+
2331
/// <summary>
2432
/// Executes a code
2533
/// </summary>
2634
/// <param name="code">JavaScript code</param>
2735
void Execute(string code);
2836

37+
/// <summary>
38+
/// Executes a code
39+
/// </summary>
40+
/// <param name="code">JavaScript code</param>
41+
/// <param name="documentName">Document name</param>
42+
void Execute(string code, string documentName);
43+
2944
/// <summary>
3045
/// Calls a function
3146
/// </summary>

src/MsieJavaScriptEngine/JsRt/ChakraJsRtJsEngineBase.cs

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,11 @@ namespace MsieJavaScriptEngine.JsRt
1313
/// </summary>
1414
internal abstract class ChakraJsRtJsEngineBase : IInnerJsEngine
1515
{
16+
/// <summary>
17+
/// JS source context
18+
/// </summary>
19+
protected JsSourceContext _jsSourceContext = JsSourceContext.FromIntPtr(IntPtr.Zero);
20+
1621
/// <summary>
1722
/// JavaScript engine mode
1823
/// </summary>
@@ -113,9 +118,19 @@ private void ExternalObjectFinalizeCallback(IntPtr data)
113118
public abstract string Mode { get; }
114119

115120

116-
public abstract object Evaluate(string expression);
121+
public object Evaluate(string expression)
122+
{
123+
return Evaluate(expression, string.Empty);
124+
}
125+
126+
public abstract object Evaluate(string expression, string documentName);
127+
128+
public void Execute(string code)
129+
{
130+
Execute(code, string.Empty);
131+
}
117132

118-
public abstract void Execute(string code);
133+
public abstract void Execute(string code, string documentName);
119134

120135
public abstract object CallFunction(string functionName, params object[] args);
121136

src/MsieJavaScriptEngine/JsRt/Edge/ChakraEdgeJsRtJsEngine.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -944,21 +944,21 @@ public override string Mode
944944
get { return _engineModeName; }
945945
}
946946

947-
public override object Evaluate(string expression)
947+
public override object Evaluate(string expression, string documentName)
948948
{
949949
object result = InvokeScript(() =>
950950
{
951-
EdgeJsValue resultValue = EdgeJsContext.RunScript(expression);
951+
EdgeJsValue resultValue = EdgeJsContext.RunScript(expression, _jsSourceContext++, documentName);
952952

953953
return MapToHostType(resultValue);
954954
});
955955

956956
return result;
957957
}
958958

959-
public override void Execute(string code)
959+
public override void Execute(string code, string documentName)
960960
{
961-
InvokeScript(() => EdgeJsContext.RunScript(code));
961+
InvokeScript(() => EdgeJsContext.RunScript(code, _jsSourceContext++, documentName));
962962
}
963963

964964
public override object CallFunction(string functionName, params object[] args)

src/MsieJavaScriptEngine/JsRt/Ie/ChakraIeJsRtJsEngine.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -982,21 +982,21 @@ public override string Mode
982982
get { return _engineModeName; }
983983
}
984984

985-
public override object Evaluate(string expression)
985+
public override object Evaluate(string expression, string documentName)
986986
{
987987
object result = InvokeScript(() =>
988988
{
989-
IeJsValue resultValue = IeJsContext.RunScript(expression);
989+
IeJsValue resultValue = IeJsContext.RunScript(expression, _jsSourceContext++, documentName);
990990

991991
return MapToHostType(resultValue);
992992
});
993993

994994
return result;
995995
}
996996

997-
public override void Execute(string code)
997+
public override void Execute(string code, string documentName)
998998
{
999-
InvokeScript(() => IeJsContext.RunScript(code));
999+
InvokeScript(() => IeJsContext.RunScript(code, _jsSourceContext++, documentName));
10001000
}
10011001

10021002
public override object CallFunction(string functionName, params object[] args)

src/MsieJavaScriptEngine/MsieJsEngine.cs

Lines changed: 83 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,29 @@ public object Evaluate(string expression)
223223
return _jsEngine.Evaluate(expression);
224224
}
225225

226+
/// <summary>
227+
/// Evaluates an expression
228+
/// </summary>
229+
/// <param name="expression">JavaScript expression</param>
230+
/// <param name="documentName">Document name</param>
231+
/// <returns>Result of the expression</returns>
232+
/// <exception cref="System.ObjectDisposedException">Operation is performed on a disposed MSIE
233+
/// JavaScript engine.</exception>
234+
/// <exception cref="System.ArgumentException" />
235+
/// <exception cref="MsieJavaScriptEngine.JsRuntimeException">JavaScript runtime error.</exception>
236+
public object Evaluate(string expression, string documentName)
237+
{
238+
VerifyNotDisposed();
239+
240+
if (string.IsNullOrWhiteSpace(expression))
241+
{
242+
throw new ArgumentException(
243+
string.Format(CommonStrings.Common_ArgumentIsEmpty, "expression"), "expression");
244+
}
245+
246+
return _jsEngine.Evaluate(expression, documentName);
247+
}
248+
226249
/// <summary>
227250
/// Evaluates an expression
228251
/// </summary>
@@ -257,6 +280,41 @@ public T Evaluate<T>(string expression)
257280
return TypeConverter.ConvertToType<T>(result);
258281
}
259282

283+
/// <summary>
284+
/// Evaluates an expression
285+
/// </summary>
286+
/// <typeparam name="T">Type of result</typeparam>
287+
/// <param name="expression">JavaScript expression</param>
288+
/// <param name="documentName">Document name</param>
289+
/// <returns>Result of the expression</returns>
290+
/// <exception cref="System.ObjectDisposedException">Operation is performed on a disposed MSIE
291+
/// JavaScript engine.</exception>
292+
/// <exception cref="System.ArgumentException" />
293+
/// <exception cref="MsieJavaScriptEngine.NotSupportedTypeException">The type of return value
294+
/// is not supported.</exception>
295+
/// <exception cref="MsieJavaScriptEngine.JsRuntimeException">JavaScript runtime error.</exception>
296+
public T Evaluate<T>(string expression, string documentName)
297+
{
298+
VerifyNotDisposed();
299+
300+
if (string.IsNullOrWhiteSpace(expression))
301+
{
302+
throw new ArgumentException(
303+
string.Format(CommonStrings.Common_ArgumentIsEmpty, "expression"), "expression");
304+
}
305+
306+
Type returnValueType = typeof(T);
307+
if (!ValidationHelpers.IsSupportedType(returnValueType))
308+
{
309+
throw new NotSupportedTypeException(
310+
string.Format(CommonStrings.Runtime_ReturnValueTypeNotSupported, returnValueType.FullName));
311+
}
312+
313+
object result = _jsEngine.Evaluate(expression, documentName);
314+
315+
return TypeConverter.ConvertToType<T>(result);
316+
}
317+
260318
/// <summary>
261319
/// Executes a code
262320
/// </summary>
@@ -278,6 +336,28 @@ public void Execute(string code)
278336
_jsEngine.Execute(code);
279337
}
280338

339+
/// <summary>
340+
/// Executes a code
341+
/// </summary>
342+
/// <param name="code">JavaScript code</param>
343+
/// <param name="documentName">Document name</param>
344+
/// <exception cref="System.ObjectDisposedException">Operation is performed on a disposed MSIE
345+
/// JavaScript engine.</exception>
346+
/// <exception cref="System.ArgumentException" />
347+
/// <exception cref="MsieJavaScriptEngine.JsRuntimeException">JavaScript runtime error.</exception>
348+
public void Execute(string code, string documentName)
349+
{
350+
VerifyNotDisposed();
351+
352+
if (string.IsNullOrWhiteSpace(code))
353+
{
354+
throw new ArgumentException(
355+
string.Format(CommonStrings.Common_ArgumentIsEmpty, "code"), "code");
356+
}
357+
358+
_jsEngine.Execute(code, documentName);
359+
}
360+
281361
/// <summary>
282362
/// Executes a code from JS-file
283363
/// </summary>
@@ -299,7 +379,7 @@ public void ExecuteFile(string path, Encoding encoding = null)
299379
}
300380

301381
string code = Utils.GetFileTextContent(path, encoding);
302-
Execute(code);
382+
Execute(code, path);
303383
}
304384

305385
/// <summary>
@@ -336,7 +416,7 @@ public void ExecuteResource(string resourceName, Type type)
336416
}
337417

338418
string code = Utils.GetResourceAsString(resourceName, type);
339-
Execute(code);
419+
Execute(code, resourceName);
340420
}
341421

342422
/// <summary>
@@ -372,7 +452,7 @@ public void ExecuteResource(string resourceName, Assembly assembly)
372452
}
373453

374454
string code = Utils.GetResourceAsString(resourceName, assembly);
375-
Execute(code);
455+
Execute(code, resourceName);
376456
}
377457

378458
/// <summary>

0 commit comments

Comments
 (0)