private static LpObject break_(LpObject self, LpObject[] args, LpObject block = null) { var ret = LpNl.initialize(); ret.controlStatus = ControlCode.BREAK; return(ret); }
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()); } }
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()); }
static LpObject display(LpObject self, LpObject[] args, LpObject block = null) { var so = to_s(self, args); Console.WriteLine(so.stringValue); return(LpNl.initialize()); }
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); }
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()); }
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); }
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()); }
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); }
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); }
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); }
// 末尾再帰の実装できるかわからないので、便利な道具を優先する 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()); }
// 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()); }
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()); }
protected static LpObject display(LpObject self, LpObject[] args, LpObject block = null) { Console.WriteLine(self.doubleValue.ToString()); return(LpNl.initialize()); }
protected static LpObject display(LpObject self, LpObject[] args, LpObject block = null) { Console.WriteLine(to_s(self, args, block).stringValue); return(LpNl.initialize()); }
public static LpObject display(LpObject self, LpObject args) { //return (LpObject)(new LpNl()); return(LpNl.initialize()); }
private static LpObject fetch(LpObject self, LpObject[] args, LpObject block = null) { return(LpNl.initialize()); }
private static LpObject exit(LpObject self, LpObject[] args, LpObject block = null) { Environment.Exit(0); return(LpNl.initialize()); }
// TODO: 全く未実装 private static LpObject yield_(LpObject self, LpObject[] args, LpObject block = null) { //control_status = (int)CONTROL_CODE.BREAK; return(LpNl.initialize()); }
private static LpObject exec(LpObject self, LpObject[] args, LpObject block = null) { var expr = args[0]; return(LpNl.initialize()); }
// TODO: 全く未実装 private static LpObject is_block_given(LpObject self, LpObject[] args, LpObject block = null) { return(LpNl.initialize()); }