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); }
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); }