public void FunctionReturnTests() { string txt = "return abc"; AntlrInputStream inputStream = new AntlrInputStream(txt); BogieLangLexer lexer = new BogieLangLexer(inputStream); CommonTokenStream commonTokenStream = new CommonTokenStream(lexer); BogieLangParser parser = new BogieLangParser(commonTokenStream); BogieLangParser.FunctionReturnContext functionReturnContext = parser.functionReturn(); BogieLangBaseVisitor <object> visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(functionReturnContext); FunctionReturn functionReturn = FunctionReturn.Compile(functionReturnContext); Assert.True(functionReturn.Expression.Identifier == "abc"); txt = "return 10.0"; inputStream = new AntlrInputStream(txt); lexer = new BogieLangLexer(inputStream); commonTokenStream = new CommonTokenStream(lexer); parser = new BogieLangParser(commonTokenStream); functionReturnContext = parser.functionReturn(); visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(functionReturnContext); functionReturn = FunctionReturn.Compile(functionReturnContext); Assert.True(functionReturn.Expression.Literal.Real == 10.0); }
public void FunctionReturnTests() { VariableEnvironment variables = new VariableEnvironment(); FunctionEnvironment functionEnvironment = new FunctionEnvironment(); variables.DeclareVariable("abc", BogieLangType.BOOL); variables.DefineVariable("abc", true); string txt = "return abc"; AntlrInputStream inputStream = new AntlrInputStream(txt); BogieLangLexer lexer = new BogieLangLexer(inputStream); CommonTokenStream commonTokenStream = new CommonTokenStream(lexer); BogieLangParser parser = new BogieLangParser(commonTokenStream); BogieLangParser.FunctionReturnContext functionReturnContext = parser.functionReturn(); BogieLangBaseVisitor <object> visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(functionReturnContext); FunctionReturn functionReturn = FunctionReturn.Compile(functionReturnContext); Assert.True((bool)functionReturn.Execute(functionEnvironment, variables) == true); variables.Clear(); txt = "return 10.0"; inputStream = new AntlrInputStream(txt); lexer = new BogieLangLexer(inputStream); commonTokenStream = new CommonTokenStream(lexer); parser = new BogieLangParser(commonTokenStream); functionReturnContext = parser.functionReturn(); visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(functionReturnContext); functionReturn = FunctionReturn.Compile(functionReturnContext); Assert.True((double)functionReturn.Execute(functionEnvironment, variables) == 10.0); }
private ImmutableArray <FunctionReturn> GetAllReturns(IFunctionDefinitionOrLambdaSyntax function) { if (function.IsArrow) { var returnExpression = ((ExpressionStatementSyntax)function.Body !).ExpressionSyntax; var toReturn = new FunctionReturn(returnExpression.Location, BindExpression(returnExpression)); return(ImmutableArray.Create(toReturn)); } return(function.TopLevelReturns.Select(InferReturnedType).ToImmutableArray()); }
internal override void Process(ProfilerSession sess) { Tracing.PacketTrace("CALLS: Function returned on thread {0}", sess.m_currentThreadPID); if (sess.m_threadCallStacks.ContainsKey(sess.m_currentThreadPID)) { Debug.Assert(sess.m_threadCallStacks[sess.m_currentThreadPID].Count > 0); sess.m_threadCallStacks[sess.m_currentThreadPID].Pop(); } FunctionReturn f = new FunctionReturn(); f.m_thread = sess.m_currentThreadPID; f.duration = m_duration; sess.AddEvent(f); }