예제 #1
0
 /// <summary>
 /// Logs severity to console.
 /// </summary>
 /// <param name="settings">Settings for interpreter</param>
 /// <param name="exp">The functiona call expression</param>
 public static string Log(LangSettings settings, FunctionCallExpr exp)
 {
     if (!settings.EnableLogging) return string.Empty;
     var funcname = exp.ToQualifiedName();
     var severity =funcname.Substring(funcname.IndexOf(".") + 1);
     var message = BuildMessage(exp.ParamList);
     Console.WriteLine(severity.ToUpper() + " : " + message);
     return message;
 }
예제 #2
0
 /// <summary>
 /// Logs a call to the console.
 /// </summary>
 /// <param name="exp"></param>
 public void Log(FunctionCallExpr exp)
 {
     var settings = this.Ctx.Settings;
     if (!settings.EnablePrinting)
         return; 
     
     var funcname = exp.ToQualifiedName();
     var severity = funcname.Substring(funcname.IndexOf(".") + 1);
     var message = BuildMessage(exp.ParamList);
     Console.WriteLine(severity.ToUpper() + " : " + message);
 }
예제 #3
0
        /// <summary>
        /// Checks function call expressions for correct number of parameters.
        /// </summary>
        /// <param name="semActs">The semantic analyser</param>
        /// <param name="exp">The functioncallexpression</param>
        private SemanticCheckResult CheckFunctionCall(SemActs semActs, FunctionCallExpr exp)
        {
            var functionName = exp.ToQualifiedName();
            var exists = exp.SymScope.IsFunction(functionName);
            
            // 1. Function does not exist.
            if (!exists)
            {
                return AddErrorCode(ErrorCodes.Func1000, exp, functionName);
            }
            var sym = exp.SymScope.GetSymbol(functionName) as SymbolFunction;
            var func = sym.FuncExpr as FunctionExpr;

            // 5. Check that named parameters exist.
            foreach(var argExpr in exp.ParamListExpressions)
            {
                if(argExpr.IsNodeType(NodeTypes.SysNamedParameter))
                {
                    var argName = ((NamedParameterExpr) argExpr).Name;
                    if (!func.Meta.ArgumentsLookup.ContainsKey(argName))
                        AddErrorCode(ErrorCodes.Func1002, exp, argName);
                }
            }
            return SemanticCheckResult.Valid;
        }