11using System . Diagnostics ;
2+ using System . Diagnostics . CodeAnalysis ;
23using System . Runtime . CompilerServices ;
34using Esprima ;
45using Esprima . Ast ;
@@ -227,7 +228,7 @@ internal ExecutionContext EnterExecutionContext(in ExecutionContext context)
227228 /// </summary>
228229 public Engine SetValue ( string name , Delegate value )
229230 {
230- Realm . GlobalObject . FastSetProperty ( name , new PropertyDescriptor ( new DelegateWrapper ( this , value ) , true , false , true ) ) ;
231+ Realm . GlobalObject . FastSetProperty ( name , new PropertyDescriptor ( new DelegateWrapper ( this , value ) , PropertyFlag . NonEnumerable ) ) ;
231232 return this ;
232233 }
233234
@@ -244,23 +245,23 @@ public Engine SetValue(string name, string? value)
244245 /// </summary>
245246 public Engine SetValue ( string name , double value )
246247 {
247- return SetValue ( name , JsNumber . Create ( value ) ) ;
248+ return SetValue ( name , ( JsValue ) JsNumber . Create ( value ) ) ;
248249 }
249250
250251 /// <summary>
251252 /// Registers an integer value as variable.
252253 /// </summary>
253254 public Engine SetValue ( string name , int value )
254255 {
255- return SetValue ( name , JsNumber . Create ( value ) ) ;
256+ return SetValue ( name , ( JsValue ) JsNumber . Create ( value ) ) ;
256257 }
257258
258259 /// <summary>
259260 /// Registers a boolean value as variable.
260261 /// </summary>
261262 public Engine SetValue ( string name , bool value )
262263 {
263- return SetValue ( name , value ? JsBoolean . True : JsBoolean . False ) ;
264+ return SetValue ( name , ( JsValue ) ( value ? JsBoolean . True : JsBoolean . False ) ) ;
264265 }
265266
266267 /// <summary>
@@ -273,7 +274,7 @@ public Engine SetValue(string name, JsValue value)
273274 }
274275
275276 /// <summary>
276- /// Registers an object value as variable, creates an interop wrapper when needed..
277+ /// Registers an object value as variable, creates an interop wrapper when needed.
277278 /// </summary>
278279 public Engine SetValue ( string name , object ? obj )
279280 {
@@ -284,6 +285,26 @@ public Engine SetValue(string name, object? obj)
284285 return SetValue ( name , value ) ;
285286 }
286287
288+ /// <summary>
289+ /// Registers an object value as variable, creates an interop wrapper when needed.
290+ /// </summary>
291+ public Engine SetValue ( string name , [ DynamicallyAccessedMembers ( InteropHelper . DefaultDynamicallyAccessedMemberTypes ) ] Type type )
292+ {
293+ #pragma warning disable IL2111
294+ return SetValue ( name , TypeReference . CreateTypeReference ( this , type ) ) ;
295+ #pragma warning restore IL2111
296+ }
297+
298+ /// <summary>
299+ /// Registers an object value as variable, creates an interop wrapper when needed.
300+ /// </summary>
301+ public Engine SetValue < [ DynamicallyAccessedMembers ( InteropHelper . DefaultDynamicallyAccessedMemberTypes ) ] T > ( string name , T ? obj )
302+ {
303+ return obj is Type t
304+ ? SetValue ( name , t )
305+ : SetValue ( name , JsValue . FromObject ( this , obj ) ) ;
306+ }
307+
287308 internal void LeaveExecutionContext ( )
288309 {
289310 _executionContexts . Pop ( ) ;
0 commit comments