public static void AddCheckpointPattern(string triggeringFuncName, string yieldingFuncName) { PatternToActionGenerator[triggeringFuncName] = new ActionGenerators { forceCheckpoint = _ => $"{yieldingFuncName}()" }; }
public static void AddCheckpointNextPattern(string triggeringFuncName, string yieldingFuncName) { string pattern = $@"(^|[\s\(:]){triggeringFuncName}(\(|\s*,)"; PatternToActionGenerator[pattern] = new ActionGenerators { unpreload = _ => $"{yieldingFuncName}()\n" }; }
// Generate `preload(obj, 'resource')` when matching `func(...)` or `...(func, ...)` public static void AddPatternWithObjectAndResource(string funcName, string objName, string resource) { string pattern = $@"(^|[ \(:]){funcName}(\(| *,)"; PatternToActionGenerator[pattern] = new ActionGenerators { preload = groups => $"preload({objName}, '{resource}')", unpreload = groups => $"unpreload({objName}, '{resource}')" }; }
// Generate `preload(obj, 'resource')` when matching `func('resource', ...)` or `...(func, 'resource', ...)` public static void AddPatternWithObject(string funcName, string objName) { string pattern = $@"(^|[ \(:]){funcName}(\(| *,) *'(?<res>[^']+)'"; PatternToActionGenerator[pattern] = new ActionGenerators { preload = groups => $"preload({objName}, '{groups["res"].Value}')", unpreload = groups => $"unpreload({objName}, '{groups["res"].Value}')" }; }
// Generate `preload(obj, 'resource')` when matching `func('resource', ...)` or `...(func, 'resource', ...)` public static void AddPatternWithObject(string funcName, string objName) { string pattern = $@"(^|[\s\(:]){funcName}(\(|\s*,)\s*(?<res>['""][^'""]+['""])"; PatternToActionGenerator[pattern] = new ActionGenerators { preload = groups => $"preload({objName}, {groups["res"].Value})\n", unpreload = groups => $"unpreload({objName}, {groups["res"].Value})\n" }; }
// Generate `preload(obj, 'resource_1')\npreload(obj, 'resource_2')\n...` // when matching `func({'resource_1', 'resource_2', ...}, ...)` or `...(func, {'resource_1', 'resource_2', ...}, ...)` public static void AddPatternWithObjectForTable(string funcName, string objName) { string pattern = $@"(^|[ \(:]){funcName}(\(| *,) *\{{(?<res>[^\}}]+)\}}"; PatternToActionGenerator[pattern] = new ActionGenerators { preload = groups => string.Join("\n", groups["res"].Value.Split(',').Select(res => $"preload({objName}, {res})") ), unpreload = groups => string.Join("\n", groups["res"].Value.Split(',').Select(res => $"unpreload({objName}, {res})") ) }; }
// Generate `preload(obj, 'resource_1')\npreload(obj, 'resource_2')\n...` // when matching `func(obj, {'resource_1', 'resource_2', ...}, ...)` or `...(func, obj, {'resource_1', 'resource_2', ...}, ...)` public static void AddPatternForTable(string funcName) { string pattern = $@"(^|[\s\(:]){funcName}(\(|\s*,)\s*(?<obj>[^\s,]+)\s*,\s*\{{(?<res>[^\}}]+)\}}"; PatternToActionGenerator[pattern] = new ActionGenerators { preload = groups => string.Concat( groups["res"].Value.Split(',').Select(res => $"preload({groups["obj"].Value}, {res})\n") ), unpreload = groups => string.Concat( groups["res"].Value.Split(',').Select(res => $"unpreload({groups["obj"].Value}, {res})\n") ) }; }