public static bool Prefix( ScriptCompiler __instance, ITokenStream akTokenStream, out ScriptObjectType akParsedObj) { var apTokenStream = akTokenStream; #endif __instance._logger.LogTrace("Parsing {0}...", __instance._targetScript.Id); var parser = new PapyrusParser(apTokenStream); // TODO: Currently suppressing parser errors so that the compiler will continue with type resolution and disambiguation. // AttachParserInternalErrorEventHandler(parser, __instance); var parserDynamic = parser.AsDynamic(); parserDynamic.KnownUserFlags = __instance.GetFlagsDictionary(); parser.script(); #if FALLOUT4 apParsedObj = parser.ParsedObject; arpParentName = parser.ParentObjName; apImports = parser.pImportedItems; #elif SKYRIM akParsedObj = parser.ParsedObject; #endif return(false); }
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 PapyrusParser parser, Action <object, ErrorEventArgs> handler) { OnError(parser, _errorHandlerName, handler); }