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; }
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); }
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); }
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)); }
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)); }
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"); }
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")); }
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)); }
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)); }
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)); }
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))); }
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))); } }
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)); }
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)); }
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); }
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); }
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); }
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); }
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); }
internal static IDynamic IsNan(IEnvironment environment, IArgs args) { var n = args[0].ConvertToNumber().BaseValue; return environment.CreateBoolean(double.IsNaN(n)); }
internal static IDynamic IsFinite(IEnvironment environment, IArgs args) { var n = args[0].ConvertToNumber().BaseValue; return(environment.CreateBoolean(!double.IsNaN(n) && !double.IsInfinity(n))); }