示例#1
0
 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) });
 }
示例#2
0
        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);
        }
示例#3
0
        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) }));
        }
示例#5
0
 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;
 }