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
        private bool TryReadVariableDeclaration(CodeScope scope, List <Definition> newDefList)
        {
            var dataType = DataType.TryParse(new DataType.ParseArgs
            {
                Code             = _code,
                DataTypeCallback = GlobalDataTypeCallback,
                VariableCallback = GlobalVariableCallback
            });

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

            var gotVars = false;

            while (!_code.EndOfFile)
            {
                if (!_code.ReadWord())
                {
                    break;
                }

                var varName  = _code.Text;
                var localPos = _source.GetFilePosition(_code.TokenStartPostion);

                var arrayLength = TryReadArrayDecl();

                var def = new VariableDefinition(varName, localPos, dataType, false, arrayLength, VariableType.Local);
                scope.AddDefinition(def);
                if (!_visible || localPos.PrimaryFile)
                {
                    newDefList.Add(def);
                }
                gotVars = true;

                if (_code.ReadExact(','))
                {
                    continue;
                }
                if (_code.ReadExact(';'))
                {
                    break;
                }
                break;
            }

            return(gotVars);
        }