コード例 #1
0
            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);
            }
コード例 #2
0
        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]);
            }
        }
コード例 #3
0
 public static void OnError(this PapyrusParser parser, Action <object, ErrorEventArgs> handler)
 {
     OnError(parser, _errorHandlerName, handler);
 }