Exemplo n.º 1
0
        public override sealed IObject Construct(IEnvironment environment, IArgs args)
        {
            var patternArg = args[0];
            var flagsArg = args[1];
            var pattern = "";
            var flags = "";
            bool global, ignoreCase, multiline;

            var patternObject = patternArg as IObject;
            if (patternObject != null && patternObject.Class == "RegExp")
            {
                if (flagsArg.TypeCode != LanguageTypeCode.Undefined)
                {
                    throw environment.CreateTypeError("");
                }
                global = ((IBoolean)patternObject.Get("global")).BaseValue;
                ignoreCase = ((IBoolean)patternObject.Get("ignoreCase")).BaseValue;
                multiline = ((IBoolean)patternObject.Get("multiline")).BaseValue;
                pattern = ((IString)patternObject.Get("source")).BaseValue;
                if (global) flags += "g";
                if (ignoreCase) flags += "i";
                if (multiline) flags += "m";
            }
            else
            {
                if (patternArg.TypeCode != LanguageTypeCode.Undefined)
                {
                    pattern = patternArg.ConvertToString().BaseValue;
                }
                if (flagsArg.TypeCode != LanguageTypeCode.Undefined)
                {
                    flags = flagsArg.ConvertToString().BaseValue;
                }
                global = flags.Contains("g");
                ignoreCase = flags.Contains("i");
                multiline = flags.Contains("m");
            }

            var regExpObj = new NRegExp(environment);
            regExpObj.Class = "RegExp";
            regExpObj.Extensible = true;
            regExpObj.Prototype = environment.RegExpPrototype;
            regExpObj.Body = pattern;
            regExpObj.Flags = flags;
            regExpObj.RegExpMatcher = Machete.Compiler.RegExpParser.Parse(Environment, pattern, flags);
            regExpObj.DefineOwnProperty("source", environment.CreateDataDescriptor(environment.CreateString(pattern), false, false, false), false);
            regExpObj.DefineOwnProperty("global", environment.CreateDataDescriptor(environment.CreateBoolean(global), false, false, false), false);
            regExpObj.DefineOwnProperty("ignoreCase", environment.CreateDataDescriptor(environment.CreateBoolean(ignoreCase), false, false, false), false);
            regExpObj.DefineOwnProperty("multiline", environment.CreateDataDescriptor(environment.CreateBoolean(multiline), false, false, false), false);
            regExpObj.DefineOwnProperty("lastIndex", environment.CreateDataDescriptor(environment.CreateNumber(0.0), true, false, false), false);
            return regExpObj;
        }
Exemplo n.º 2
0
 public override IDynamic Next(IEnvironment environment, IArgs args)
 {
     if (Generator.Complete)
         return environment.CreateBoolean(false);
     environment.Context.LexicalEnviroment = Scope;
     environment.Context.VariableEnviroment = Scope;
     if (!Generator.Initialized)
     {
         environment.BindVariableDeclarations(VariableDeclarations, true, true);
         Generator.Initialized = true;
     }
     var step = Generator.Steps.Dequeue();
     var iterated = step(environment, Generator);
     Generator.Complete = !iterated || Generator.Steps.Count == 0;
     return environment.CreateBoolean(iterated);
 }
Exemplo n.º 3
0
 private static IDynamic HasOwnProperty(IEnvironment environment, IArgs args)
 {
     if (args.IsEmpty) return environment.False;
     var obj = environment.Context.ThisBinding.ConvertToObject();
     var desc = obj.GetOwnProperty(args[0].ConvertToString().BaseValue);
     return environment.CreateBoolean(desc != null);
 }
Exemplo n.º 4
0
        private static IDynamic IsPrototypeOf(IEnvironment environment, IArgs args)
        {
            var value   = args[0] as LObject;
            var thisObj = environment.Context.ThisBinding.ConvertToObject();

            return(environment.CreateBoolean(value != null && value.Prototype != null && value.Prototype == thisObj));
        }
Exemplo n.º 5
0
        internal static IDynamic IsFrozen(IEnvironment environment, IArgs args)
        {
            if (args[0].TypeCode != LanguageTypeCode.Object)
            {
                throw environment.CreateTypeError("");
            }
            var obj = args[0].ConvertToObject();

            foreach (var name in obj)
            {
                var desc = obj.GetOwnProperty(name);
                if (desc.Configurable ?? false)
                {
                    return(environment.False);
                }
                if (desc.IsDataDescriptor)
                {
                    if (desc.Writable ?? false)
                    {
                        return(environment.False);
                    }
                }
                obj.DefineOwnProperty(name, desc, true);
            }

            return(environment.CreateBoolean(!obj.Extensible));
        }
Exemplo n.º 6
0
        internal static IDynamic IsArray(IEnvironment environment, IArgs args)
        {
            // 15.4.3.2 Array.isArray ( arg )

            var arg = args[0] as IObject;
            return environment.CreateBoolean(arg != null && arg.Class == "Array");
        }
Exemplo n.º 7
0
        internal static IDynamic IsArray(IEnvironment environment, IArgs args)
        {
            // 15.4.3.2 Array.isArray ( arg )

            var arg = args[0] as IObject;

            return(environment.CreateBoolean(arg != null && arg.Class == "Array"));
        }
Exemplo n.º 8
0
        public override IDynamic Next(IEnvironment environment, IArgs args)
        {
            if (Generator.Complete)
            {
                return(environment.CreateBoolean(false));
            }
            environment.Context.LexicalEnviroment  = Scope;
            environment.Context.VariableEnviroment = Scope;
            if (!Generator.Initialized)
            {
                environment.BindVariableDeclarations(VariableDeclarations, true, true);
                Generator.Initialized = true;
            }
            var step     = Generator.Steps.Dequeue();
            var iterated = step(environment, Generator);

            Generator.Complete = !iterated || Generator.Steps.Count == 0;
            return(environment.CreateBoolean(iterated));
        }
Exemplo n.º 9
0
        internal static IDynamic IsExtensible(IEnvironment environment, IArgs args)
        {
            if (args[0].TypeCode != LanguageTypeCode.Object)
            {
                throw environment.CreateTypeError("");
            }
            var obj = args[0].ConvertToObject();

            return(environment.CreateBoolean(obj.Extensible));
        }
Exemplo n.º 10
0
        private static IDynamic HasOwnProperty(IEnvironment environment, IArgs args)
        {
            if (args.IsEmpty)
            {
                return(environment.False);
            }
            var obj  = environment.Context.ThisBinding.ConvertToObject();
            var desc = obj.GetOwnProperty(args[0].ConvertToString().BaseValue);

            return(environment.CreateBoolean(desc != null));
        }
Exemplo n.º 11
0
        private static IDynamic PropertyIsEnumerable(IEnvironment environment, IArgs args)
        {
            if (args.IsEmpty)
            {
                return(environment.False);
            }
            var obj  = environment.Context.ThisBinding.ConvertToObject();
            var desc = obj.GetOwnProperty(args[0].ConvertToString().ToString());

            return(environment.CreateBoolean(desc != null && (desc.Enumerable ?? false)));
        }
Exemplo n.º 12
0
 public IDynamic Op_Delete()
 {
     if (_base is LUndefined)
     {
         if (_strictReference)
         {
             throw _environment.CreateSyntaxError("");
         }
         return(_environment.True);
     }
     else if (_base is IEnvironmentRecord)
     {
         if (_strictReference)
         {
             throw _environment.CreateSyntaxError("");
         }
         return(_environment.CreateBoolean(((IEnvironmentRecord)_base).DeleteBinding(_referencedName)));
     }
     else
     {
         return(_environment.CreateBoolean(((IDynamic)_base).ConvertToObject().Delete(_referencedName, _strictReference)));
     }
 }
Exemplo n.º 13
0
        internal static IDynamic IsSealed(IEnvironment environment, IArgs args)
        {
            if (args[0].TypeCode != LanguageTypeCode.Object)
            {
                throw environment.CreateTypeError("");
            }
            var obj = args[0].ConvertToObject();

            foreach (var name in obj)
            {
                var desc = obj.GetOwnProperty(name);
                if (desc.Configurable ?? false)
                {
                    return(environment.False);
                }
            }

            return(environment.CreateBoolean(!obj.Extensible));
        }
Exemplo n.º 14
0
 private static IDynamic PropertyIsEnumerable(IEnvironment environment, IArgs args)
 {
     if (args.IsEmpty) return environment.False;
     var obj = environment.Context.ThisBinding.ConvertToObject();
     var desc = obj.GetOwnProperty(args[0].ConvertToString().ToString());
     return environment.CreateBoolean(desc != null && (desc.Enumerable ?? false));
 }
Exemplo n.º 15
0
 private static IDynamic IsPrototypeOf(IEnvironment environment, IArgs args)
 {
     var value = args[0] as LObject;
     var thisObj = environment.Context.ThisBinding.ConvertToObject();
     return environment.CreateBoolean(value != null && value.Prototype != null && value.Prototype == thisObj);
 }
Exemplo n.º 16
0
        internal static IDynamic IsSealed(IEnvironment environment, IArgs args)
        {
            if (args[0].TypeCode != LanguageTypeCode.Object)
            {
                throw environment.CreateTypeError("");
            }
            var obj = args[0].ConvertToObject();
            foreach (var name in obj)
            {
                var desc = obj.GetOwnProperty(name);
                if (desc.Configurable ?? false)
                {
                    return environment.False;
                }
            }

            return environment.CreateBoolean(!obj.Extensible);
        }
Exemplo n.º 17
0
        internal static IDynamic IsFrozen(IEnvironment environment, IArgs args)
        {
            if (args[0].TypeCode != LanguageTypeCode.Object)
            {
                throw environment.CreateTypeError("");
            }
            var obj = args[0].ConvertToObject();
            foreach (var name in obj)
            {
                var desc = obj.GetOwnProperty(name);
                if (desc.Configurable ?? false)
                {
                    return environment.False;
                }
                if (desc.IsDataDescriptor)
                {
                    if (desc.Writable ?? false)
                    {
                        return environment.False;
                    }
                }
                obj.DefineOwnProperty(name, desc, true);
            }

            return environment.CreateBoolean(!obj.Extensible);
        }
Exemplo n.º 18
0
 internal static IDynamic IsExtensible(IEnvironment environment, IArgs args)
 {
     if (args[0].TypeCode != LanguageTypeCode.Object)
     {
         throw environment.CreateTypeError("");
     }
     var obj = args[0].ConvertToObject();
     return environment.CreateBoolean(obj.Extensible);
 }
Exemplo n.º 19
0
        public sealed override IObject Construct(IEnvironment environment, IArgs args)
        {
            var  patternArg = args[0];
            var  flagsArg = args[1];
            var  pattern = "";
            var  flags = "";
            bool global, ignoreCase, multiline;

            var patternObject = patternArg as IObject;

            if (patternObject != null && patternObject.Class == "RegExp")
            {
                if (flagsArg.TypeCode != LanguageTypeCode.Undefined)
                {
                    throw environment.CreateTypeError("");
                }
                global     = ((IBoolean)patternObject.Get("global")).BaseValue;
                ignoreCase = ((IBoolean)patternObject.Get("ignoreCase")).BaseValue;
                multiline  = ((IBoolean)patternObject.Get("multiline")).BaseValue;
                pattern    = ((IString)patternObject.Get("source")).BaseValue;
                if (global)
                {
                    flags += "g";
                }
                if (ignoreCase)
                {
                    flags += "i";
                }
                if (multiline)
                {
                    flags += "m";
                }
            }
            else
            {
                if (patternArg.TypeCode != LanguageTypeCode.Undefined)
                {
                    pattern = patternArg.ConvertToString().BaseValue;
                }
                if (flagsArg.TypeCode != LanguageTypeCode.Undefined)
                {
                    flags = flagsArg.ConvertToString().BaseValue;
                }
                global     = flags.Contains("g");
                ignoreCase = flags.Contains("i");
                multiline  = flags.Contains("m");
            }

            var regExpObj = new NRegExp(environment);

            regExpObj.Class         = "RegExp";
            regExpObj.Extensible    = true;
            regExpObj.Prototype     = environment.RegExpPrototype;
            regExpObj.Body          = pattern;
            regExpObj.Flags         = flags;
            regExpObj.RegExpMatcher = Machete.Compiler.RegExpParser.Parse(Environment, pattern, flags);
            regExpObj.DefineOwnProperty("source", environment.CreateDataDescriptor(environment.CreateString(pattern), false, false, false), false);
            regExpObj.DefineOwnProperty("global", environment.CreateDataDescriptor(environment.CreateBoolean(global), false, false, false), false);
            regExpObj.DefineOwnProperty("ignoreCase", environment.CreateDataDescriptor(environment.CreateBoolean(ignoreCase), false, false, false), false);
            regExpObj.DefineOwnProperty("multiline", environment.CreateDataDescriptor(environment.CreateBoolean(multiline), false, false, false), false);
            regExpObj.DefineOwnProperty("lastIndex", environment.CreateDataDescriptor(environment.CreateNumber(0.0), true, false, false), false);
            return(regExpObj);
        }
Exemplo n.º 20
0
 internal static IDynamic IsNan(IEnvironment environment, IArgs args)
 {
     var n = args[0].ConvertToNumber().BaseValue;
     return environment.CreateBoolean(double.IsNaN(n));
 }
Exemplo n.º 21
0
        internal static IDynamic IsFinite(IEnvironment environment, IArgs args)
        {
            var n = args[0].ConvertToNumber().BaseValue;

            return(environment.CreateBoolean(!double.IsNaN(n) && !double.IsInfinity(n)));
        }