public static bool ResolveToLocalVariableIndex(this CompilerIO self, Slice slice, out int index)
        {
            var source = self.parser.tokenizer.source;

            for (var i = self.localVariables.count - 1; i >= 0; i--)
            {
                var local = self.localVariables.buffer[i];
                if (CompilerHelper.AreEqual(source, slice, local.slice))
                {
                    index = i;
                    return(true);
                }
            }

            if (self.loopNesting.count > 0 || CompilerHelper.AreEqual(source, slice, "it"))
            {
                for (var i = self.localVariables.count - 1; i >= 0; i--)
                {
                    if (self.localVariables.buffer[i].IsIteration)
                    {
                        index = i;
                        return(true);
                    }
                }
            }

            index = 0;
            return(false);
        }
예제 #2
0
        private static Option <ValueType> ParseStructOrClassType(this CompilerIO self, int recursionLevel)
        {
            var source = self.parser.tokenizer.source;
            var slice  = self.parser.previousToken.slice;

            for (var i = 0; i < self.chunk.structTypes.count; i++)
            {
                var structName = self.chunk.structTypes.buffer[i].name;
                if (CompilerHelper.AreEqual(source, slice, structName))
                {
                    return(Option.Some(new ValueType(TypeKind.Struct, i)));
                }
            }

            for (var i = 0; i < self.chunk.nativeClassTypes.count; i++)
            {
                var className = self.chunk.nativeClassTypes.buffer[i].name;
                if (CompilerHelper.AreEqual(source, slice, className))
                {
                    return(Option.Some(new ValueType(TypeKind.NativeClass, i)));
                }
            }

            return(Option.None);
        }
        // NATIVE FUNCTIONS
        public static bool ResolveToNativeFunctionIndex(this CompilerIO self, Slice slice, out int index)
        {
            var source = self.parser.tokenizer.source;

            for (var i = 0; i < self.chunk.nativeFunctions.count; i++)
            {
                var f = self.chunk.nativeFunctions.buffer[i];
                if (CompilerHelper.AreEqual(source, slice, f.name))
                {
                    index = i;
                    return(true);
                }
            }

            index = 0;
            return(false);
        }
        public static bool ResolveToStructTypeIndex(this CompilerIO self, Slice slice, out int index)
        {
            var source = self.parser.tokenizer.source;

            for (var i = 0; i < self.chunk.structTypes.count; i++)
            {
                var s = self.chunk.structTypes.buffer[i];
                if (
                    CompilerHelper.IsStructTypeVisible(self.chunk, i, self.structTypesStartIndex) &&
                    CompilerHelper.AreEqual(source, slice, s.name)
                    )
                {
                    index = i;
                    return(true);
                }
            }

            index = 0;
            return(false);
        }