#region using using System; using System.Collections.Generic; using Irony.Compiler; using ScriptNET.Runtime; #endregion namespace ScriptNET.Ast { /// /// /// internal class ScriptMObject : ScriptExpr { private List objectParts; public ScriptMObject(AstNodeArgs args) : base(args) { objectParts = new List(); if (args.ChildNodes[0] is ScriptMObjectPart) { ScriptMObjectPart part = (ScriptMObjectPart)args.ChildNodes[0]; objectParts.Add(part); } else { foreach (ScriptMObjectPart part in args.ChildNodes[0].ChildNodes) { objectParts.Add(part); } } } public override void Evaluate(IScriptContext context) { string typeName = RuntimeHost.GetSettingsItem("ScriptableObjectType") as string; Type mobjectType = typeof(Expando); if (!string.IsNullOrEmpty(typeName)) mobjectType = RuntimeHost.GetType(typeName); IScriptable mobject = RuntimeHost.Activator.CreateInstance(mobjectType) as IScriptable; foreach (ScriptMObjectPart part in objectParts) { part.Evaluate(context); object[] rez = (object[])context.Result; mobject.GetMember((string)rez[0], null).SetValue(rez[1]); } context.Result = mobject; } } }