public static string AddRefModifiers(this string code) { var functions = FunctionsParser.Parse(code); foreach (var function in functions .ToArray() .Where(f => f.Parameters.Any(p => p.ByReference))) { var f = function; foreach (var methodCall in MethodCallsParser.Parse(code) .Where(call => call.MethodName == f.Name) .ToArray()) { foreach (var parameter in f.Parameters.Where(p => p.ByReference)) { var parameterValue = methodCall.Parameters[parameter.Index]; if (parameter.Type != "IMq4DoubleArray") { methodCall.Parameters[parameter.Index] = "ref " + parameterValue; } } code = code.Replace(methodCall.OriginalText, methodCall.ToCSharpCode()); } } return(code); }
public static string RenameFunctions(this string code) { var functions = FunctionsParser.Parse(code); foreach (var function in functions) { if (function.Name == "start" || function.Name == "init") { continue; } var regex = new Regex(@"(?<!\w)" + function.Name + @"\s*\("); code = regex.Replace(code, function.Name + "Func("); } return(code); }
public GameObjectResolver(string questFile, HashSet <string> alreadyLoadedFiles = null) { AlreadyLoadedFiles = alreadyLoadedFiles ?? new HashSet <string>(); _filePath = new FileInfo(questFile).Directory?.FullName; using (var file = File.Open(questFile, FileMode.Open)) _gameFile = XDocument.Load(file); if (_gameFile.Root == null) { throw new ArgumentException("ASLX game file should not be empty...", nameof(questFile)); } InferFileType(); ProcessIncludeReferences(); var functionParser = new FunctionsParser(this); var parsedFunctions = functionParser.Parse(_gameFile); _functionReferenceGraph.MergeWith(parsedFunctions.ReferenceGraph); _functionDefinitions.MergeWith(parsedFunctions.Definitions); var delegateParser = new DelegatesParser(); _delegateDefinitions.MergeWith(delegateParser.Parse(_gameFile)); var objectTypeParser = new ObjectTypeParser(_delegateDefinitions); _typeInheritanceGraph.MergeWith(objectTypeParser.Parse(_gameFile)); _objectTypeDefinitions.MergeWith(_typeInheritanceGraph.ToDictionary(x => x.Name, x => x)); BuildTypeInheritanceGraph(); var objectParser = new ObjectParser(_delegateDefinitions, _typeInheritanceGraph, _objectTypeDefinitions); _objectDefinitions.MergeWith(objectParser.Parse(_gameFile)); PostLoadInitialization(); }
public Function GetFunction() { return(FunctionsParser.Parse(functionText)); }