public object TryInvokeMemberMissing(BikeObject target, string name, out bool success) { var scope = target.FindScopeFor(InterpreterHelper.MemberMissing); if (scope == null) { success = false; return null; } var memberMissingFunc = scope.Members[InterpreterHelper.MemberMissing] as BikeFunction; if (memberMissingFunc == null) throw ErrorFactory.CreateTypeError(InterpreterHelper.MemberMissing + " must be a function"); success = true; return CallBikeFunction(memberMissingFunc, scope, new[] { new BikeString(name) }); }
private static ScopeFrame InitScopeFrame() { var scopeFrame = new ScopeFrame(); var bikeNamespace = new BikeObject(ObjectBase); scopeFrame.Define("Bike", bikeNamespace); bikeNamespace.Define("Object", ObjectBase); bikeNamespace.Define("Array", ArrayBase); bikeNamespace.Define("String", StringBase); bikeNamespace.Define("Number", NumberBase); bikeNamespace.Define("Boolean", BooleanBase); bikeNamespace.Define("Function", FunctionBase); bikeNamespace.Define("Error", ErrorBase); return(scopeFrame); }
public override object Walk(ObjectLiteral node) { var bikeObject = new BikeObject(InterpretationContext.ObjectBase); foreach (var prop in node.Properties) { string name = prop.Key is Identifier ? ((Identifier)prop.Key).Value : ((PrimitiveLiteral)prop.Key).Value; var value = prop.Value.Accept(this); bikeObject.Assign(name, value); if (value is BikeFunction && ((BikeFunction)value).Name.Value == BikeFunction.Anonymous) { ((BikeFunction)value).Name = new BikeString(name); } } return(bikeObject); }
public object TryInvokeMemberMissing(BikeObject target, string name, out bool success) { var scope = target.FindScopeFor(InterpreterHelper.MemberMissing); if (scope == null) { success = false; return(null); } var memberMissingFunc = scope.Members[InterpreterHelper.MemberMissing] as BikeFunction; if (memberMissingFunc == null) { throw ErrorFactory.CreateTypeError(InterpreterHelper.MemberMissing + " must be a function"); } success = true; return(CallBikeFunction(memberMissingFunc, scope, new[] { new BikeString(name) })); }
public override object Walk(ObjectLiteral node) { var bikeObject = new BikeObject(InterpretationContext.ObjectBase); foreach (var prop in node.Properties) { string name = prop.Key is Identifier ? ((Identifier) prop.Key).Value : ((PrimitiveLiteral) prop.Key).Value; var value = prop.Value.Accept(this); bikeObject.Assign(name, value); if (value is BikeFunction && ((BikeFunction)value).Name.Value == BikeFunction.Anonymous) { ((BikeFunction)value).Name = new BikeString(name); } } return bikeObject; }