Exemple #1
0
        private static LpObject break_(LpObject self, LpObject[] args, LpObject block = null)
        {
            var ret = LpNl.initialize();

            ret.controlStatus = ControlCode.BREAK;
            return(ret);
        }
Exemple #2
0
        LpObject convertReturnValue(object result)
        {
            if (null == result)
            {
                return(LpNl.initialize());
            }

            var t = result.GetType();

            switch (t.ToString())
            {
            case "System.UInt16":
            case "System.UInt32":
            case "System.UInt64":
            case "System.Int16":
            case "System.Int32":
            case "System.Int64":
                return(LpNumeric.initialize((int)result));

            case "System.Double":
                return(LpNumeric.initialize((double)result));

            case "System.String":
            case "System.Symbol":
                return(LpString.initialize((string)result));

            default:
                return(LpNl.initialize());
            }
        }
Exemple #3
0
        private static LpObject sleep(LpObject self, LpObject[] args, LpObject block = null)
        {
            var time = args[0].doubleValue;

            System.Threading.Thread.Sleep((int)time);
            return(LpNl.initialize());
        }
Exemple #4
0
        static LpObject display(LpObject self, LpObject[] args, LpObject block = null)
        {
            var so = to_s(self, args);

            Console.WriteLine(so.stringValue);
            return(LpNl.initialize());
        }
Exemple #5
0
        private static LpObject loop(LpObject self, LpObject[] args, LpObject block = null)
        {
            LpObject ret = LpNl.initialize();

            if (block == null)
            {
                return(ret);
            }

            while (true)
            {
                ret = block.funcall("call", args, null);
                // break文
                if (ret.controlStatus == ControlCode.BREAK)
                {
                    ret.controlStatus = ControlCode.NONE;
                    break;
                }
                // next文
                if (ret.controlStatus == ControlCode.NEXT)
                {
                    ret.controlStatus = ControlCode.NONE;
                    break;
                }
            }
            return(ret);
        }
Exemple #6
0
        private static LpObject load(LpObject self, LpObject[] args, LpObject block = null)
        {
            // TODO: load path から使えるものを順番に捜す
            var code = readFile(args[0].stringValue);

            //LpParser.execute(code);
            return(LpNl.initialize());
        }
Exemple #7
0
        private static LpObject return_(LpObject self, LpObject[] args, LpObject block = null)
        {
            var ret = LpNl.initialize();

            if (args.Count() == 1)
            {
                ret = args[0].arrayValues.First();
            }

            ret.controlStatus = ControlCode.RETURN;
            return(ret);
        }
Exemple #8
0
        private static LpObject alias(LpObject self, LpObject[] args, LpObject block = null)
        {
            var src = args[0];
            var dst = args[1];

            if (null == self.methods[src.stringValue])
            {
                throw new Error.LpNoMethodError();
            }

            self.methods[dst.stringValue] = self.methods[src.stringValue];
            return(LpNl.initialize());
        }
Exemple #9
0
        static LpObject call(LpObject self, LpObject[] args, LpObject block = null)
        {
            self.arguments.putVariables(args, block);

            LpObject ret = LpNl.initialize();

            //self.statements.First().UseType

            /*
             * foreach (Ast.LpAstNode stmt in self.statements)
             * {
             *  ret = stmt.Evaluate();
             * }
             */
            return(ret);
        }
Exemple #10
0
        public static LpObject call(LpObject self, LpObject[] args, LpObject block = null)
        {
            var dstArgs = (null == args) ? new LpObject[] { } : args;

            self.arguments.setVariables(self, dstArgs, block);
            //self.arguments.putVariables(args, block);


            LpObject ret = LpNl.initialize();

            /*
             * foreach (Ast.LpAstNode stmt in self.statements)
             * {
             *  ret = stmt.Evaluate();
             *  if (ret.class_name == "Quote" || ret.class_name == "QuasiQuote")
             *      ret = LpParser.execute(ret.stringValue);
             * }
             */
            return(ret);
        }
Exemple #11
0
        public static LpObject call(LpObject self, LpObject[] args, LpObject block = null)
        {
            //Util.LpIndexer.push(self);
            var dstArgs = (null == args) ? new LpObject[] { } : args;

            self.arguments.setVariables(self, dstArgs, block);

            LpObject ret = LpNl.initialize();

            /*
             * foreach (Ast.LpAstNode stmt in self.statements)
             * {
             *  ret = stmt.Evaluate();
             *
             *  if (ret.controlStatus == LpBase.ControlCode.RETURN) break;
             * }
             */
            //Util.LpIndexer.pop();
            return(ret);
        }
Exemple #12
0
        // 末尾再帰の実装できるかわからないので、便利な道具を優先する
        private static LpObject cond(LpObject self, LpObject[] args, LpObject block = null)
        {
            Func <LpObject, LpObject> fun  = (stmt) => (stmt.class_name == "Block" || stmt.class_name == "Lambda") ? stmt.funcall("call", null) : stmt;
            Func <LpObject, bool>     test = (stmt) => (bool)fun(stmt).funcall("to_bool", null, null).boolValue;

            var args2 = args.First().arrayValues;

            if (args2.Count() < 1 || (args2.Count() % 2) == 1)
            {
                throw new Error.LpArgumentError();
            }

            for (int i = 0; args2.Count() >= i + 2; i += 2)
            {
                if (test(args2[i]))
                {
                    return(fun(args2[i + 1]));
                }
            }

            return(LpNl.initialize());
        }
Exemple #13
0
        // case function can translate to macro.
        // TODO: case function shoud test that change to macro.
        private static LpObject case_(LpObject self, LpObject[] args, LpObject block = null)
        {
            var caseArgs = args.First().arrayValues;

            if (caseArgs.Count() < 1)
            {
                throw new Error.LpArgumentError();
            }

            var expr = caseArgs[0];

            for (int i = 1; i < caseArgs.Count(); i += 2)
            {
                bool ret = (bool)expr.funcall("==", new LpObject[] { caseArgs[i] }, null).boolValue;
                if (ret)
                {
                    return(caseArgs[i + 1].funcall("call", null, null));
                }
            }

            return(LpNl.initialize());
        }
Exemple #14
0
        private static LpObject close(LpObject self, LpObject[] args, LpObject block = null)
        {
            switch (self.stringValue)
            {
            case "w":
            case "w+":
                if (self.streamWriter != null)
                {
                    self.streamWriter.Close();
                    self.streamWriter = null;
                }
                break;

            case "r":
            case "r+":
                if (self.streamReader != null)
                {
                    self.streamReader.Close();
                    self.streamReader = null;
                }
                break;
            }
            return(LpNl.initialize());
        }
Exemple #15
0
 protected static LpObject display(LpObject self, LpObject[] args, LpObject block = null)
 {
     Console.WriteLine(self.doubleValue.ToString());
     return(LpNl.initialize());
 }
Exemple #16
0
 protected static LpObject display(LpObject self, LpObject[] args, LpObject block = null)
 {
     Console.WriteLine(to_s(self, args, block).stringValue);
     return(LpNl.initialize());
 }
Exemple #17
0
 public static LpObject display(LpObject self, LpObject args)
 {
     //return (LpObject)(new LpNl());
     return(LpNl.initialize());
 }
Exemple #18
0
 private static LpObject fetch(LpObject self, LpObject[] args, LpObject block = null)
 {
     return(LpNl.initialize());
 }
Exemple #19
0
 private static LpObject exit(LpObject self, LpObject[] args, LpObject block = null)
 {
     Environment.Exit(0);
     return(LpNl.initialize());
 }
Exemple #20
0
 // TODO: 全く未実装
 private static LpObject yield_(LpObject self, LpObject[] args, LpObject block = null)
 {
     //control_status = (int)CONTROL_CODE.BREAK;
     return(LpNl.initialize());
 }
Exemple #21
0
        private static LpObject exec(LpObject self, LpObject[] args, LpObject block = null)
        {
            var expr = args[0];

            return(LpNl.initialize());
        }
Exemple #22
0
 // TODO: 全く未実装
 private static LpObject is_block_given(LpObject self, LpObject[] args, LpObject block = null)
 {
     return(LpNl.initialize());
 }