Example #1
0
        private bool TryReadFunctionArgument(CodeScope scope, bool createDefinitions, List <ArgumentDescriptor> args, List <Definition> newDefList)
        {
            var dataType = DataType.TryParse(new DataType.ParseArgs
            {
                Code             = _code,
                DataTypeCallback = GlobalDataTypeCallback,
                VariableCallback = GlobalVariableCallback
            });

            if (dataType == null)
            {
                return(false);
            }

            PassByMethod passByMethod = PassByMethod.Value;

            if (_code.ReadExact("&"))                   // Optional reference
            {
                if (_code.ReadExact("+"))               // Optional &+
                {
                    passByMethod = PassByMethod.ReferencePlus;
                }
                else
                {
                    passByMethod = PassByMethod.Reference;
                }
            }

            string name = null;

            if (_code.ReadWord())
            {
                name = _code.Text;
            }

            args.Add(new ArgumentDescriptor(name, dataType, passByMethod));

            if (name != null && createDefinitions)              // Optional var name
            {
                var arrayLength = TryReadArrayDecl();

                var localPos = _source.GetFilePosition(_code.TokenStartPostion);
                var def      = new VariableDefinition(_code.Text, localPos, dataType, true, arrayLength, VariableType.Argument);
                scope.AddDefinition(def);
                if (!_visible || localPos.PrimaryFile)
                {
                    newDefList.Add(def);
                }
            }

            return(true);
        }
Example #2
0
        public static ArgumentDescriptor ParseFromDb(string str)
        {
            string       name         = null;
            PassByMethod passByMethod = PassByMethod.Value;
            DataType     dataType     = null;

            var code = new CodeParser(str);

            if (code.ReadExactWholeWord("name"))
            {
                if (!code.ReadWord())
                {
                    Log.Debug("Unable to parse argument name from: {0}", str);
                    return(null);
                }
                name = code.Text;
            }

            if (code.ReadExactWholeWord("ref"))
            {
                passByMethod = PassByMethod.Reference;
            }
            else if (code.ReadExactWholeWord("refp"))
            {
                passByMethod = PassByMethod.ReferencePlus;
            }

            if (code.ReadExactWholeWord("dt"))
            {
                dataType = DataType.TryParse(new DataType.ParseArgs {
                    Code = code
                });
                if (dataType == null)
                {
                    Log.Debug("Unable to parse data type from: {0}", str);
                }
            }

            return(new ArgumentDescriptor(name, dataType, passByMethod));
        }
Example #3
0
 public ArgumentDescriptor(string name, DataType dataType)
 {
     _name         = name;
     _dataType     = dataType;
     _passByMethod = DkTools.CodeModel.PassByMethod.Value;
 }
Example #4
0
 public ArgumentDescriptor(string name, DataType dataType, PassByMethod passByMethod)
 {
     _name         = name;
     _dataType     = dataType;
     _passByMethod = passByMethod;
 }