public AstValue Evaluate(string codeText) { var expr = GetExpression(codeText); if (expr.IsNullOrInvalid()) { return(null); } var progressTitle = CompileProgressTitle("Expression"); try { var value = GMacExpressionEvaluator.EvaluateExpression( RefResContext.MainScope, expr.AssociatedExpression ); this.ReportNormal(progressTitle, value.ToString(), ProgressEventArgsResult.Success); return(value.ToAstValue()); } catch (Exception e) { this.ReportError(progressTitle, e); return(null); } }
/// <summary> /// Generate a constant defined inside a frame /// </summary> /// <param name="frame"></param> /// <param name="constantName"></param> /// <returns></returns> private GMacConstant Create_Frame_Constant(GMacFrame frame, string constantName) { Context.PushState(frame.ChildSymbolScope); if (frame.CanDefineChildSymbol(constantName) == false) { CompilationLog.RaiseGeneratorError <int>("Symbol name already used", RootParseNode); } var constantExpr = GMacExpressionGenerator.Translate(Context, RootParseNode.ChildNodes[1]); var constantValue = GMacExpressionEvaluator.EvaluateExpression(Context.ActiveParentScope, constantExpr); Context.PopState(); return(frame.DefineFrameConstant(constantName, constantValue)); }
//public override void ResetOnAcquire() //{ // base.ResetOnAcquire(); // _generatedConstant = null; //} /// <summary> /// Generate a constant defined inside a namespace /// </summary> /// <param name="nameSpace"></param> /// <param name="constantName"></param> /// <returns></returns> private GMacConstant Create_Namespace_Constant(GMacNamespace nameSpace, string constantName) { if (GMacCompilerFeatures.CanDefineNamespaceConstants == false) { CompilationLog.RaiseGeneratorError <int>("Can't define a constant inside a namespace", RootParseNode); } Context.PushState(nameSpace.ChildSymbolScope); if (nameSpace.CanDefineChildSymbol(constantName) == false) { CompilationLog.RaiseGeneratorError <int>("Symbol name already used", RootParseNode); } var constantExpr = GMacExpressionGenerator.Translate(Context, RootParseNode.ChildNodes[1]); var constantValue = GMacExpressionEvaluator.EvaluateExpression(Context.ActiveParentScope, constantExpr); Context.PopState(); return(nameSpace.DefineNamespaceConstant(constantName, constantValue)); }