Exemple #1
0
        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;
        }
Exemple #2
0
        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;
        }