public virtual IDynamic Call(IEnvironment environment, IDynamic thisBinding, IArgs args) { var oldContext = environment.Context; var newEnvironment = Scope.NewDeclarativeEnvironment(); using (var newContext = environment.EnterContext()) { newContext.LexicalEnviroment = newEnvironment; newContext.VariableEnviroment = newEnvironment; newContext.Strict = ExecutableCode.Strict; if (ExecutableCode.Strict) { newContext.ThisBinding = thisBinding; } else { switch (thisBinding.TypeCode) { case LanguageTypeCode.Undefined: case LanguageTypeCode.Null: newContext.ThisBinding = Environment.GlobalObject; break; default: newContext.ThisBinding = thisBinding.ConvertToObject(); break; } } BindFormalParameters(args); Environment.BindFunctionDeclarations(ExecutableCode.FunctionDeclarations, ExecutableCode.Strict, true); BindArgumentsObject(args); Environment.BindVariableDeclarations(ExecutableCode.VariableDeclarations, ExecutableCode.Strict, true); return ExecutableCode.Code(environment, args); } }
internal static IDynamic Write(IEnvironment environment, IArgs args) { var value = args[0].ConvertToString().BaseValue; environment.Output.Write(value); return(environment.Undefined); }
private static IDynamic Shift(IEnvironment environment, IArgs args) { var obj = environment.Context.ThisBinding.ConvertToObject(); var length = obj.Get("length").ConvertToUInt32().BaseValue; if (length == 0) { return(environment.Undefined); } var first = obj.Get("0"); var from = ""; var to = ""; for (int i = 1; i < length; i++) { from = i.ToString(); to = (i - 1).ToString(); if (obj.HasProperty(from)) { obj.Put(to, obj.Get(from), true); } else { obj.Delete(to, true); } } obj.Delete((length - 1).ToString(), true); obj.Put("length", environment.CreateNumber(length - 1D), true); return(first); }
internal static IDynamic Parse(IEnvironment environment, IArgs args) { var text = args[0]; var reviver = args[1]; return(Machete.Compiler.JsonParser.Parse(environment, text, reviver)); }
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 Eval(IEnvironment environment, IArgs args) { var x = args[0]; if (x.TypeCode != LanguageTypeCode.String) { return(x); } var compiler = new CompilerService(environment); var context = environment.Context; var e = compiler.CompileEvalCode(x.ConvertToString().BaseValue, context.Strict); using (var c = environment.EnterContext()) { c.ThisBinding = context.ThisBinding; c.LexicalEnviroment = context.LexicalEnviroment; c.VariableEnviroment = context.VariableEnviroment; if (e.Strict) { var s = context.LexicalEnviroment.NewDeclarativeEnvironment(); c.LexicalEnviroment = s; c.VariableEnviroment = s; } return(e.Code(environment, environment.EmptyArgs)); } }
public void OnbroadcastEvt(EventType eventType, IArgs args) { for (int i = 0; i < dispatchers.Count; i++) { dispatchers[i].OnInvokeEvt(eventType, args); } }
internal static IDynamic DefineProperty(IEnvironment environment, IArgs args) { if (args[0].TypeCode != LanguageTypeCode.Object) { throw environment.CreateTypeError(""); } var obj = args[0].ConvertToObject(); var name = args[1].ConvertToString().BaseValue; if (args.Count < 2) { var desc = environment.CreateGenericDescriptor(null, null); obj.DefineOwnProperty(name, desc, true); } else { var attributes = args[2] as IObject; if (attributes == null) { throw environment.CreateTypeError(""); } var desc = environment.ToPropertyDescriptor(attributes); obj.DefineOwnProperty(name, desc, true); } return(obj); }
internal static IDynamic DecodeUri(IEnvironment environment, IArgs args) { const string reservedURISet = ";/?:@&=+$,#"; var uriString = args[0].ConvertToString().BaseValue; return(environment.CreateString(Decode(environment, uriString, reservedURISet))); }
internal static IDynamic Min(IEnvironment environment, IArgs args) { if (args.IsEmpty) { return(environment.CreateNumber(double.PositiveInfinity)); } if (args.Count == 1) { return(args[0].ConvertToNumber()); } var numbers = new INumber[args.Count]; for (int i = 0; i < numbers.Length; i++) { var number = args[i].ConvertToNumber(); if (double.IsNaN(number.BaseValue)) { return(environment.CreateNumber(double.NaN)); } numbers[i] = number; } INumber r = null; foreach (var n in numbers) { if (r == null || r.Op_Greaterthan(n).ConvertToBoolean().BaseValue) { r = n; } } return(r); }
private static IDynamic ForEach(IEnvironment environment, IArgs args) { var obj = environment.Context.ThisBinding.ConvertToObject(); var callArgs = new IDynamic[] { null, null, obj }; var length = (uint)obj.Get("length").ConvertToUInt32().BaseValue; var callbackfn = args[0] as ICallable; var thisArg = args[1]; if (callbackfn == null) { throw environment.CreateTypeError("The first parameter 'callbackfn' must be callable."); } for (uint i = 0; i < length; i++) { var key = i.ToString(); if (obj.HasProperty(key)) { callArgs[0] = obj.Get(key); callArgs[1] = environment.CreateNumber(i); callbackfn.Call(environment, thisArg, environment.CreateArgs(callArgs)); } } return(environment.Undefined); }
private static IDynamic Filter(IEnvironment environment, IArgs args) { var result = ((IConstructable)environment.ArrayConstructor).Construct(environment, environment.EmptyArgs); var obj = environment.Context.ThisBinding.ConvertToObject(); var length = (uint)obj.Get("length").ConvertToUInt32().BaseValue; var callbackfn = args[0] as ICallable; var thisArg = args[1]; if (callbackfn == null) { throw environment.CreateTypeError(""); } for (uint i = 0; i < length; i++) { var key = i.ToString(); if (obj.HasProperty(key)) { var value = obj.Get(key); var callArgs = environment.CreateArgs(new[] { value, environment.CreateNumber(i), obj }); var include = callbackfn.Call(environment, thisArg, callArgs); if (include.ConvertToBoolean().BaseValue) { result.DefineOwnProperty(key, environment.CreateDataDescriptor(value, true, true, true), false); } } } return(result); }
private static IDynamic Map(IEnvironment environment, IArgs args) { var result = ((IConstructable)environment.ArrayConstructor).Construct(environment, environment.EmptyArgs); var obj = environment.Context.ThisBinding.ConvertToObject(); var callArgs = new IDynamic[] { null, null, obj }; var length = (uint)obj.Get("length").ConvertToUInt32().BaseValue; var callbackfn = args[0] as ICallable; var thisArg = args[1]; if (callbackfn == null) { throw environment.CreateTypeError("The first parameter 'callbackfn' must be callable."); } for (uint i = 0; i < length; i++) { var key = i.ToString(); if (obj.HasProperty(key)) { callArgs[0] = obj.Get(key); callArgs[1] = environment.CreateNumber(i); var value = callbackfn.Call(environment, thisArg, environment.CreateArgs(callArgs)); result.DefineOwnProperty(key, environment.CreateDataDescriptor(value, true, true, true), false); } } return(result); }
public void RunNewInstance(IPackage package) { string target = null; if (application.Args.SelfOriginalPath != null) { target = application.Args.SelfOriginalPath; } else { target = Directory .EnumerateFiles(application.Args.Path, CurrentFileName, SearchOption.AllDirectories) .FirstOrDefault(); } if (target != null) { IArgs args = application.Args.Clone(); args.IsSelfUpdate = false; args.SelfUpdateVersion = null; string arguments = args.ToString(); processes.Run(target, arguments); } }
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 CreateIterator(IEnvironment environment, IArgs args) { var scope = Scope.NewDeclarativeEnvironment(); var generator = new Generator(new GeneratorSteps(Steps)); var iterator = new HGeneratorIterator(environment, generator, VariableDeclarations, scope); return iterator; }
private static IDynamic Concat(IEnvironment environment, IArgs args) { var obj = environment.Context.ThisBinding.ConvertToObject(); var array = environment.ArrayConstructor.Op_Construct(environment.EmptyArgs); var current = default(IDynamic); var count = 0; for (int i = -1; i < args.Count; i++) { current = i < 0 ? obj : args[i]; if (current.TypeCode != LanguageTypeCode.Object) { var desc = environment.CreateDataDescriptor(current, true, true, true); array.DefineOwnProperty((count++).ToString(), desc, false); } else { var inner = current as NArray; if (inner != null) { var length = (uint)inner.Get("length").ConvertToUInt32().BaseValue; for (int j = 0; j < length; j++) { var key = j.ToString(); if (inner.HasProperty(key)) { var desc = environment.CreateDataDescriptor(inner.Get(key), true, true, true); array.DefineOwnProperty((count++).ToString(), desc, false); } } } } } return(array); }
private static IDynamic IndexOf(IEnvironment environment, IArgs args) { var obj = environment.Context.ThisBinding.ConvertToObject(); var length = (uint)obj.Get("length").ConvertToUInt32().BaseValue; if (length == 0) { return(environment.CreateNumber(-1)); } var searchElement = args[0]; var fromIndex = (uint)Math.Max(Math.Floor(args[1].ConvertToNumber().BaseValue), 0D); if (fromIndex >= length) { return(environment.CreateNumber(-1)); } for (uint i = 0; i < length; i++) { var key = i.ToString(); if (obj.HasProperty(key)) { if (obj.Get(key).Op_StrictEquals(searchElement).ConvertToBoolean().BaseValue) { return(environment.CreateNumber(i)); } } } return(environment.CreateNumber(-1)); }
IDynamic Search(IEnvironment environment, IArgs args) { var o = environment.Context.ThisBinding; environment.CheckObjectCoercible(o); var s = o.ConvertToString().BaseValue; var regexpArg = args[0]; var regexpObj = regexpArg as NRegExp; if (regexpObj == null) { var constructor = (IConstructable)environment.RegExpConstructor; var pattern = regexpArg.ConvertToString(); regexpObj = (NRegExp)constructor.Construct(environment, environment.CreateArgs(new [] { pattern })); } var regExp = regexpObj.RegExpMatcher; var index = 0; do { var result = regExp(s, index); if (result.success) { return(environment.CreateNumber(index)); } } while (++index < s.Length); return(environment.CreateNumber(-1)); }
private static IDynamic Unshift(IEnvironment environment, IArgs args) { var obj = environment.Context.ThisBinding.ConvertToObject(); var len = (uint)obj.Get("length").ConvertToUInt32().BaseValue; var argCount = (uint)args.Count; var k = len; while (k > 0) { var from = (k - 1).ToString(); var to = (k + argCount - 1).ToString(); if (obj.HasProperty(from)) { var fromValue = obj.Get(from); obj.Put(to, fromValue, true); } else { obj.Delete(to, true); } k--; } for (int i = 0; i < argCount; i++) { obj.Put(i.ToString(), args[i], true); } var newLength = environment.CreateNumber(len + argCount); obj.Put("length", newLength, true); return(newLength); }
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)); }
// Spawns with given arguments and adds a collider public void SpawnBullet(IArgs args) { Bullet bullet = bulletPool.SpawnFromPool(args); bulletsAlive.Add(bullet); OnAddCollider?.Invoke(bullet); }
internal static IDynamic EncodeUriComponent(IEnvironment environment, IArgs args) { const string unescapedURIComponentSet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_.!~*'()"; var componentString = args[0].ConvertToString().BaseValue; return(environment.CreateString(Encode(environment, componentString, unescapedURIComponentSet))); }
internal static IDynamic Stringify(IEnvironment environment, IArgs args) { var value = args[0]; var replacer = args[1]; var space = args[2]; return Machete.Compiler.JsonParser.Stringify(environment, value, replacer, space); }
internal static IDynamic Now(IEnvironment environment, IArgs args) { var value = environment.CreateNumber((DateTime.UtcNow - _utcStart).TotalMilliseconds); var constructArgs = environment.CreateArgs(new IDynamic[] { value }); return(((IConstructable)environment.DateConstructor).Construct(environment, constructArgs)); }
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 IObject CreateArgumentsObject(IArgs args) { return(new HLazy( Environment, () => { var obj = new NArguments(Environment); var len = Environment.CreateNumber(args.Count); var lenDesc = Environment.CreateDataDescriptor(len, true, false, true); var map = Environment.ObjectConstructor.Op_Construct(Environment.EmptyArgs); var mappedNames = new List <string>(); var index = args.Count - 1; obj.Class = "Arguments"; obj.Extensible = true; obj.Prototype = Environment.ObjectPrototype; obj.DefineOwnProperty("length", lenDesc, false); while (--index >= 0) { var val = args[index]; var valDesc = Environment.CreateDataDescriptor(val, true, true, true); obj.DefineOwnProperty(index.ToString(), valDesc, false); if (index < FormalParameters.Count) { var name = FormalParameters[index]; if (!ExecutableCode.Strict) { var g = MakeArgGetter(name); var p = MakeArgSetter(name); var desc = Environment.CreateAccessorDescriptor(g, p, false, true); map.DefineOwnProperty(name, desc, false); mappedNames.Add(name); } } } if (mappedNames.Count > 0) { obj.ParameterMap = map; } if (!ExecutableCode.Strict) { var desc = Environment.CreateDataDescriptor(this, true, false, true); obj.DefineOwnProperty("callee", desc, false); } else { var desc = Environment.CreateAccessorDescriptor(Environment.ThrowTypeErrorFunction, Environment.ThrowTypeErrorFunction, false, false); obj.DefineOwnProperty("caller", desc, false); obj.DefineOwnProperty("callee", desc, false); } return obj; } )); }
public virtual IObject Construct(IEnvironment environment, IArgs args) { var obj = new LObject(environment); obj.Class = "Object"; obj.Extensible = true; var proto = Get("prototype"); if (proto.TypeCode == LanguageTypeCode.Object) { obj.Prototype = (IObject)proto; } else { obj.Prototype = environment.ObjectPrototype; } var result = ((ICallable)this).Call(environment, obj, args); if (result.TypeCode == LanguageTypeCode.Object) { return((IObject)result); } return(obj); }
internal static IDynamic SetTime(IEnvironment environment, IArgs args) { var dt = (NDate)environment.Context.ThisBinding; var v = TimeClip(args[0].ConvertToNumber().BaseValue); dt.PrimitiveValue = environment.CreateNumber(v); return(dt.PrimitiveValue); }
internal static IDynamic Stringify(IEnvironment environment, IArgs args) { var value = args[0]; var replacer = args[1]; var space = args[2]; return(Machete.Compiler.JsonParser.Stringify(environment, value, replacer, space)); }
public IDynamic Call(IEnvironment environment, IDynamic thisBinding, IArgs args) { using (var newContext = environment.EnterContext()) { Environment.Context.ThisBinding = thisBinding; return _code(environment, args); } }
public IDynamic Call(IEnvironment environment, IDynamic thisBinding, IArgs args) { using (var newContext = environment.EnterContext()) { Environment.Context.ThisBinding = thisBinding; return(_code(environment, args)); } }
protected override sealed IDynamic Call(IEnvironment environment, IArgs args) { if (args.Count > 0) { return args[0].ConvertToNumber(); } return environment.CreateNumber(0.0); }
public void Update(IPackage latest) { string current = Assembly.GetExecutingAssembly().Location; string temp = CopySelfToTemp(current); IArgs arguments = CreateArguments(current, latest); RerunFromTemp(temp, arguments); }
/// <summary> /// Error for invalid operand(s) to operator /// </summary> /// <param name="token"></param> /// <param name="required"></param> /// <param name="given"></param> public void OperandError(IToken token, IArgs required, Type[] given) { string haveTypes = string.Join(" and ", given.Select(t => "'" + TypeName(t) + "'")); string expectedTypes = string.Join(" and ", required.Types.Select(t => "'" + TypeName(t) + "'")); string arity = required.Arity == 1 ? "unary " : required.Arity == 2 ? "binary " : string.Empty; this.Error(token, string.Format(CultureInfo.InvariantCulture, "Invalid operands to {0}operator '{1}': have {2}, expected {3}", arity, token.Text, haveTypes, expectedTypes)); }
public override IDynamic Current(IEnvironment environment, IArgs args) { if (!_initialized) { throw environment.CreateTypeError(""); } return(_array.Get(_index.ToString())); }
protected override sealed IDynamic Call(IEnvironment environment, IArgs args) { if (args.Count > 0) { return args[0].ConvertToString(); } return environment.CreateString(""); }
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 IObject Construct(IEnvironment environment, IArgs args) { var func = TargetFunction as NFunction; if (func == null) { throw Environment.CreateTypeError(""); } return func.Construct(environment, environment.ConcatArgs(BoundArguments, args)); }
protected override sealed IDynamic Call(IEnvironment environment, IArgs args) { var patternObject = args[0] as IObject; if (patternObject != null && patternObject.Class == "RegExp") { return patternObject; } return Construct(environment, args); }
internal static IDynamic FromCharCode(IEnvironment environment, IArgs args) { var sb = new StringBuilder(args.Count); foreach (var arg in args) { sb.Append((char)arg.ConvertToUInt16().BaseValue); } return environment.CreateString(sb.ToString()); }
public override IObject Construct(IEnvironment environment, IArgs args) { var obj = new NBoolean(environment); obj.Class = "Boolean"; obj.Extensible = true; obj.PrimitiveValue = args[0].ConvertToBoolean(); obj.Prototype = environment.BooleanPrototype; return obj; }
internal static IDynamic Assert(IEnvironment environment, IArgs args) { var condition = args[0].ConvertToBoolean().BaseValue; if (!condition) { var message = args[1].ConvertToString().BaseValue; throw environment.CreateError(message); } return environment.Undefined; }
public override IDynamic Next(IEnvironment environment, IArgs args) { if (_complete) return environment.False; _initialized = true; if (++_index < _length) return environment.True; _complete = true; return environment.False; }
internal static IDynamic Filter(IEnvironment environment, IArgs args) { if (args.Count < 2) throw environment.CreateTypeError("The arguments 'iterable' and 'predicate' are required."); var iterable = args[1].ConvertToObject(); var predicate = args[0].ConvertToObject() as ICallable; if (predicate == null) throw environment.CreateTypeError("The argument 'predicate' must be a callable function."); return new HFilterIterable(environment, iterable, predicate); }
internal static IDynamic Asin(IEnvironment environment, IArgs args) { double x = args[0].ConvertToNumber().BaseValue; if (double.IsNaN(x)) return environment.CreateNumber(double.NaN); if (x > 1.0 || x < -1.0) return environment.CreateNumber(double.NaN); if (x == 0.0) return environment.CreateNumber(x); return environment.CreateNumber(Math.Asin(x)); }
internal static IDynamic Abs(IEnvironment environment, IArgs args) { double x = args[0].ConvertToNumber().BaseValue; if (double.IsNaN(x)) return environment.CreateNumber(double.NaN); if (IsNegativeZero(x)) return environment.CreateNumber(0.0); if (double.IsNegativeInfinity(x)) return environment.CreateNumber(double.PositiveInfinity); return environment.CreateNumber(Math.Abs(x)); }
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; }
internal static IDynamic Iterate(IEnvironment environment, IArgs args) { var iterator = new Iterator(environment, args[1]); var callback = args[0] as ICallable; if (callback == null) throw environment.CreateTypeError("The argument 'callback' must be a callable function."); while (iterator.Next()) { var callArgs = environment.CreateArgs(new[] { iterator.Current }); callback.Call(environment, environment.Undefined, callArgs); } return environment.Undefined; }
public override IObject Construct(IEnvironment environment, IArgs args) { var r = new NDate(environment); r.Class = "Date"; r.Extensible = true; r.Prototype = environment.DatePrototype; var argCount = args.Count; double timeValue = 0.0; if (argCount == 0) { timeValue = (DateTime.UtcNow - _utcStart).TotalMilliseconds; } else if (argCount == 1) { var value = args[0].ConvertToPrimitive(null); if (value.TypeCode == LanguageTypeCode.String) { timeValue = Parse(environment, args).ConvertToNumber().BaseValue; } else { timeValue = value.ConvertToNumber().BaseValue; } } else { var year = args[0].ConvertToNumber().ConvertToInteger().BaseValue; var month = args[1].ConvertToNumber().BaseValue; var date = argCount > 2 ? args[2].ConvertToNumber().BaseValue : 1.0; var hours = argCount > 3 ? args[3].ConvertToNumber().BaseValue : 0.0; var minutes = argCount > 4 ? args[4].ConvertToNumber().BaseValue : 0.0; var seconds = argCount > 5 ? args[5].ConvertToNumber().BaseValue : 0.0; var ms = argCount > 6 ? args[6].ConvertToNumber().BaseValue : 0.0; if (!double.IsNaN(year) && year >= 0.0 && year <= 99) { year = 1900.0 + year; } var dayPortion = PDate.MakeDay(year, month, date); var timePortion = PDate.MakeTime(hours, minutes, seconds, ms); var dateValue = PDate.MakeDate(dayPortion, timePortion); timeValue = PDate.TimeClip(PDate.UTC(dateValue)); } r.PrimitiveValue = environment.CreateNumber(PDate.TimeClip(timeValue)); return r; }
public override IDynamic Next(IEnvironment environment, IArgs args) { if (_complete) return environment.False; _initialized = true; while (_iterator.Next()) { var callArgs = environment.CreateArgs(new[] { _iterator.Current }); _current = _mapping.Call(environment, environment.Undefined, callArgs); return environment.True; } _complete = true; return environment.False; }
IDynamic Exec(IEnvironment environment, IArgs args) { var r = (NRegExp)environment.Context.ThisBinding; var s = args[0].ConvertToString().BaseValue; var length = s.Length; var global = r.Get("global").ConvertToBoolean().BaseValue; var i = !global ? 0 : (int)r.Get("lastIndex").ConvertToInteger().BaseValue; int beginIndex = 0; MatchResult result; while (true) { beginIndex = i; if (i < 0 || i > length) { r.Put("length", environment.CreateNumber(0.0), true); return environment.Null; } result = r.RegExpMatcher(s, i); if (result.success) break; i++; } if (global) { r.Put("length", environment.CreateNumber(result.matchState.endIndex), true); } var captures = result.matchState.captures; var n = captures.Length; var array = ((IConstructable)environment.ArrayConstructor).Construct(environment, environment.EmptyArgs); array.DefineOwnProperty("index", environment.CreateDataDescriptor(environment.CreateNumber(beginIndex), true, true, true), true); array.DefineOwnProperty("input", environment.CreateDataDescriptor(environment.CreateString(s), true, true, true), true); array.DefineOwnProperty("length", environment.CreateDataDescriptor(environment.CreateNumber(n + 1), null, null, null), true); IDynamic value = environment.CreateString(result.matchState.input.Substring(beginIndex, result.matchState.endIndex - beginIndex)); var desc = environment.CreateDataDescriptor(value, true, true, true); array.DefineOwnProperty("0", desc, true); for (int index = 0; index < n; index++) { var v = captures[index]; value = v == null ? (IDynamic)environment.Undefined : (IDynamic)environment.CreateString(v); desc = environment.CreateDataDescriptor(value, true, true, true); array.DefineOwnProperty((index + 1).ToString(), desc, true); } return array; }
public override IDynamic Next(IEnvironment environment, IArgs args) { if (_complete) return environment.False; _initialized = true; while (_iterator.Next()) { var callArgs = environment.CreateArgs(new[] { _iterator.Current }); if (_predicate.Call(environment, environment.Undefined, callArgs).ConvertToBoolean().BaseValue) return environment.True; } _complete = true; return environment.False; }
public override IObject Construct(IEnvironment environment, IArgs args) { var message = args[0].ConvertToString(); if (message.BaseValue == "undefined") { message = environment.CreateString(""); } var error = new NError(environment); error.Class = "Error"; error.Extensible = true; error.Prototype = environment.ErrorPrototype; error.Put("message", message, false); return error; }
internal static IDynamic DefineProperties(IEnvironment environment, IArgs args) { if (args[0].TypeCode != LanguageTypeCode.Object) { throw environment.CreateTypeError(""); } var obj = args[0].ConvertToObject(); var props = args[1].ConvertToObject(); foreach (var name in props) { var desc = environment.ToPropertyDescriptor(props.Get(name).ConvertToObject()); obj.DefineOwnProperty(name, desc, true); } return obj; }
public override sealed IObject Construct(IEnvironment environment, IArgs args) { var obj = new NString(environment); { var str = args.Count > 0 ? args[0].ConvertToString() : environment.CreateString(""); var len = environment.CreateNumber(str.BaseValue.Length); var lenDesc = environment.CreateDataDescriptor(len, false, false, false); obj.Class = "String"; obj.Extensible = true; obj.Prototype = environment.StringPrototype; obj.PrimitiveValue = str; obj.DefineOwnProperty("length", lenDesc, false); } return obj; }
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); }
public override sealed IObject Construct(IEnvironment environment, IArgs args) { var obj = new NNumber(environment); obj.Class = "Number"; obj.Extensible = true; obj.Prototype = environment.NumberPrototype; if (args.Count > 0) { obj.PrimitiveValue = args[0].ConvertToNumber(); } else { obj.PrimitiveValue = environment.CreateNumber(0.0); } return obj; }
private static IDynamic ValueOf(IEnvironment environment, IArgs args) { var v = environment.Context.ThisBinding; switch (v.TypeCode) { case LanguageTypeCode.Boolean: return v; case LanguageTypeCode.Object: var o = (IObject)v; if (o.Class == "Boolean") { return ((IPrimitiveWrapper)o).PrimitiveValue; } break; } throw environment.CreateTypeError(""); }
private static IDynamic ToString(IEnvironment environment, IArgs args) { var v = environment.Context.ThisBinding; switch (v.TypeCode) { case LanguageTypeCode.Boolean: return environment.CreateString(((IBoolean)v).BaseValue ? "true" : "false"); case LanguageTypeCode.Object: var o = (IObject)v; if (o.Class == "Boolean") { return environment.CreateString(((IBoolean)((IPrimitiveWrapper)o).PrimitiveValue).BaseValue ? "true" : "false"); } break; } throw environment.CreateTypeError(""); }