public override bool Addition(StackContext sctx, PValue leftOperand, PValue rightOperand, out PValue result) { result = null; if (leftOperand.Type is HashPType && rightOperand.Type is HashPType) { var pvht1 = (PValueHashtable) leftOperand.Value; var pvht2 = (PValueHashtable) rightOperand.Value; var pvht = new PValueHashtable(pvht1.Count + pvht2.Count); foreach (var pair in pvht1) pvht.Add(pair); foreach (var pair in pvht2) pvht.AddOverride(pair); result = (PValue) pvht; } return result != null; }
public override bool TryStaticCall( StackContext sctx, PValue[] args, PCall call, string id, out PValue result) { if (sctx == null) throw new ArgumentNullException("sctx"); if (args == null) args = new PValue[] {}; if (id == null) id = ""; result = null; for (var i = 0; i < args.Length; i++) { if (args[i] == null) args[i] = Null.CreatePValue(); } PValueHashtable pvht; switch (id.ToLowerInvariant()) { case "create": //Create(params KeyValuePair[] pairs) pvht = new PValueHashtable(args.Length); foreach (var arg in args) { PValueKeyValuePair pairArg; if (_tryConvertToPair(sctx, arg, out pairArg)) pvht.AddOverride(pairArg); } result = new PValue(pvht, this); break; case "createFromArgs": if (args.Length%2 != 0) break; pvht = new PValueHashtable(args.Length/2); for (var i = 0; i < args.Length; i += 2) pvht.AddOverride(args[i], args[i + 1]); result = new PValue(pvht, this); break; default: return PValueHashtable.ObjectType.TryStaticCall(sctx, args, call, id, out result); } return result != null; }