private ArrayType GetArrayType(PapyrusType elementType) { var objectIdentifier = elementType.Name; lock (_arrayTypes) { if (!_arrayTypes.ContainsKey(objectIdentifier)) { var source = CreateArrayTypeSource(objectIdentifier); var stream = new CaseInsensitiveStringStream(source); var lexer = new PapyrusLexer(stream); var parser = new PapyrusParser(new CommonTokenStream(lexer)); parser.AsDynamic().KnownUserFlags = _program.FlagsFile.NativeFlagsDict; parser.script(); var compilerType = parser.ParsedObject; var nodeBinder = new NodeBinder(); var node = nodeBinder.Bind(null, _program, new ScriptText(null, source, "0"), compilerType.GetTokenStream(), compilerType.GetAst()); var scopeBinder = new ScopeBinder(); var scopeResult = scopeBinder.Bind(compilerType, node.Value); node.Diagnostics.AddRange(scopeResult.Diagnostics); var symbolBinder = new SymbolBinder(); var symbolResult = symbolBinder.Bind(node.Value); var type = new ArrayType(_program, symbolResult.Value, compilerType, elementType.Name); _arrayTypes.Add(objectIdentifier, type); } return(_arrayTypes[objectIdentifier]); } }
public static void OnError(this PapyrusLexer lexer, Action <object, ErrorEventArgs> handler) { OnError(lexer, _errorHandlerName, handler); }