{ "{" (2, 1) ID "lib" (2, 2) } "}" (2, 5) : ":" (2, 6) LET "let" (4, 1) INHERIT "inherit" (5, 3) ( "(" (6, 5) ID "builtins" (6, 6) ) ")" (6, 14) ID "hasContext" (7, 5) ID "match" (8, 5) ID "readDir" (9, 5) ID "split" (10, 5) ID "storeDir" (11, 5) ID "tryEval" (12, 5) ; ";" (13, 5) INHERIT "inherit" (14, 3) ( "(" (15, 5) ID "lib" (15, 6) ) ")" (15, 9) ID "boolToString" (16, 5) ID "filter" (17, 5) ID "getAttr" (18, 5) ID "isString" (19, 5) ID "pathExists" (20, 5) ID "readFile" (21, 5) ; ";" (22, 5) ID "pathType" (27, 3) = "=" (27, 12) ID "path" (27, 14) : ":" (27, 18) ID "getAttr" (27, 20) ( "(" (27, 28) ID "baseNameOf" (27, 29) ID "path" (27, 40) ) ")" (27, 44) ( "(" (27, 46) ID "readDir" (27, 47) ( "(" (27, 55) ID "dirOf" (27, 56) ID "path" (27, 62) ) ")" (27, 66) ) ")" (27, 67) ; ";" (27, 68) ID "pathIsDirectory" (32, 3) = "=" (32, 19) ID "path" (32, 21) : ":" (32, 25) IF "if" (33, 5) ID "pathExists" (33, 8) ID "path" (33, 19) THEN "then" (34, 5) ( "(" (34, 10) ID "pathType" (34, 11) ID "path" (34, 20) ) ")" (34, 24) EQ "==" (34, 26) " "\"" (34, 29) STR "directory" (34, 30) " "\"" (34, 39) ELSE "else" (35, 5) ID "false" (35, 10) ; ";" (35, 15) ID "pathIsRegularFile" (40, 3) = "=" (40, 21) ID "path" (40, 23) : ":" (40, 27) IF "if" (41, 5) ID "pathExists" (41, 8) ID "path" (41, 19) THEN "then" (42, 5) ( "(" (42, 10) ID "pathType" (42, 11) ID "path" (42, 20) ) ")" (42, 24) EQ "==" (42, 26) " "\"" (42, 29) STR "regular" (42, 30) " "\"" (42, 37) ELSE "else" (43, 5) ID "false" (43, 10) ; ";" (43, 15) ID "cleanSourceFilter" (50, 3) = "=" (50, 21) ID "name" (50, 23) : ":" (50, 27) ID "type" (50, 29) : ":" (50, 33) LET "let" (50, 35) ID "baseName" (51, 5) = "=" (51, 14) ID "baseNameOf" (51, 16) ( "(" (51, 27) ID "toString" (51, 28) ID "name" (51, 37) ) ")" (51, 41) ; ";" (51, 42) IN "in" (52, 3) ! "!" (53, 5) ( "(" (53, 7) ( "(" (55, 7) ID "baseName" (55, 8) EQ "==" (55, 17) " "\"" (55, 20) STR ".git" (55, 21) " "\"" (55, 25) OR "||" (55, 27) ID "type" (55, 30) EQ "==" (55, 35) " "\"" (55, 38) STR "directory" (55, 39) " "\"" (55, 48) AND "&&" (55, 50) ( "(" (55, 53) ID "baseName" (55, 54) EQ "==" (55, 63) " "\"" (55, 66) STR ".svn" (55, 67) " "\"" (55, 71) OR "||" (55, 73) ID "baseName" (55, 76) EQ "==" (55, 85) " "\"" (55, 88) STR "CVS" (55, 89) " "\"" (55, 92) OR "||" (55, 94) ID "baseName" (55, 97) EQ "==" (55, 106) " "\"" (55, 109) STR ".hg" (55, 110) " "\"" (55, 113) ) ")" (55, 114) ) ")" (55, 115) OR "||" (56, 7) ID "lib" (58, 7) . "." (58, 10) ID "hasSuffix" (58, 11) " "\"" (58, 21) STR "~" (58, 22) " "\"" (58, 23) ID "baseName" (58, 25) OR "||" (59, 7) ID "match" (59, 10) " "\"" (59, 16) STR "^\\.sw[a-z]$" (59, 17) " "\"" (59, 29) ID "baseName" (59, 31) NEQ "!=" (59, 40) ID "null" (59, 43) OR "||" (60, 7) ID "match" (60, 10) " "\"" (60, 16) STR "^\\..*\\.sw[a-z]$" (60, 17) " "\"" (60, 34) ID "baseName" (60, 36) NEQ "!=" (60, 45) ID "null" (60, 48) OR "||" (61, 7) ID "lib" (63, 7) . "." (63, 10) ID "hasSuffix" (63, 11) " "\"" (63, 21) STR ".o" (63, 22) " "\"" (63, 24) ID "baseName" (63, 26) OR "||" (64, 7) ID "lib" (64, 10) . "." (64, 13) ID "hasSuffix" (64, 14) " "\"" (64, 24) STR ".so" (64, 25) " "\"" (64, 28) ID "baseName" (64, 30) OR "||" (65, 7) ( "(" (67, 7) ID "type" (67, 8) EQ "==" (67, 13) " "\"" (67, 16) STR "symlink" (67, 17) " "\"" (67, 24) AND "&&" (67, 26) ID "lib" (67, 29) . "." (67, 32) ID "hasPrefix" (67, 33) " "\"" (67, 43) STR "result" (67, 44) " "\"" (67, 50) ID "baseName" (67, 52) ) ")" (67, 60) OR "||" (68, 7) ( "(" (70, 7) ID "type" (70, 8) EQ "==" (70, 13) " "\"" (70, 16) STR "unknown" (70, 17) " "\"" (70, 24) ) ")" (70, 25) ) ")" (71, 5) ; ";" (71, 6) ID "cleanSource" (79, 3) = "=" (79, 15) ID "src" (79, 17) : ":" (79, 20) ID "cleanSourceWith" (80, 5) { "{" (80, 21) ID "filter" (81, 7) = "=" (81, 14) ID "cleanSourceFilter" (81, 16) ; ";" (81, 33) INHERIT "inherit" (82, 7) ID "src" (82, 15) ; ";" (82, 18) } "}" (83, 5) ; ";" (83, 6) ID "cleanSourceWith" (104, 3) = "=" (104, 19) { "{" (104, 21) ID "src" (106, 5) , "," (106, 8) ID "filter" (113, 5) ? "?" (113, 12) ID "_path" (113, 14) : ":" (113, 19) ID "_type" (113, 21) : ":" (113, 26) ID "true" (113, 28) , "," (113, 32) ID "name" (116, 5) ? "?" (116, 10) ID "null" (116, 12) , "," (116, 16) } "}" (117, 3) : ":" (117, 4) LET "let" (117, 6) ID "orig" (118, 5) = "=" (118, 10) ID "toSourceAttributes" (118, 12) ID "src" (118, 31) ; ";" (118, 34) IN "in" (119, 3) ID "fromSourceAttributes" (120, 5) { "{" (120, 26) INHERIT "inherit" (121, 7) ( "(" (121, 15) ID "orig" (121, 16) ) ")" (121, 20) ID "origSrc" (121, 22) ; ";" (121, 29) ID "filter" (122, 7) = "=" (122, 14) ID "path" (122, 16) : ":" (122, 20) ID "type" (122, 22) : ":" (122, 26) ID "filter" (122, 28) ID "path" (122, 35) ID "type" (122, 40) AND "&&" (122, 45) ID "orig" (122, 48) . "." (122, 52) ID "filter" (122, 53) ID "path" (122, 60) ID "type" (122, 65) ; ";" (122, 69) ID "name" (123, 7) = "=" (123, 12) IF "if" (124, 9) ID "name" (124, 12) NEQ "!=" (124, 17) ID "null" (124, 20) THEN "then" (125, 9) ID "name" (125, 14) ELSE "else" (126, 9) ID "orig" (126, 14) . "." (126, 18) ID "name" (126, 19) ; ";" (126, 23) } "}" (127, 5) ; ";" (127, 6) ID "trace" (134, 3) = "=" (134, 9) ID "src" (136, 5) : ":" (136, 8) LET "let" (136, 10) ID "attrs" (137, 7) = "=" (137, 13) ID "toSourceAttributes" (137, 15) ID "src" (137, 34) ; ";" (137, 37) IN "in" (138, 5) ID "fromSourceAttributes" (139, 7) ( "(" (139, 28) ID "attrs" (140, 9) UPDATE "//" (141, 9) { "{" (141, 12) ID "filter" (142, 11) = "=" (142, 18) ID "path" (142, 20) : ":" (142, 24) ID "type" (142, 26) : ":" (142, 30) LET "let" (142, 32) ID "r" (143, 13) = "=" (143, 15) ID "attrs" (143, 17) . "." (143, 22) ID "filter" (143, 23) ID "path" (143, 30) ID "type" (143, 35) ; ";" (143, 39) IN "in" (144, 11) ID "builtins" (145, 13) . "." (145, 21) ID "trace" (145, 22) " "\"" (145, 28) DOLLAR_CURLY "${" (145, 29) ID "attrs" (145, 31) . "." (145, 36) ID "name" (145, 37) } "}" (145, 41) STR ".filter " (145, 42) DOLLAR_CURLY "${" (145, 50) ID "path" (145, 52) } "}" (145, 56) STR " = " (145, 57) DOLLAR_CURLY "${" (145, 60) ID "boolToString" (145, 62) ID "r" (145, 75) } "}" (145, 76) " "\"" (145, 77) ID "r" (145, 79) ; ";" (145, 80) } "}" (146, 9) ) ")" (147, 7) UPDATE "//" (148, 7) { "{" (148, 10) ID "satisfiesSubpathInvariant" (149, 9) = "=" (149, 35) ID "src" (149, 37) ? "?" (149, 41) ID "satisfiesSubpathInvariant" (149, 43) AND "&&" (149, 69) ID "src" (149, 72) . "." (149, 75) ID "satisfiesSubpathInvariant" (149, 76) ; ";" (149, 101) } "}" (150, 7) ; ";" (150, 8) ID "sourceByRegex" (157, 3) = "=" (157, 17) ID "src" (157, 19) : ":" (157, 22) ID "regexes" (157, 24) : ":" (157, 31) LET "let" (157, 33) ID "isFiltered" (158, 5) = "=" (158, 16) ID "src" (158, 18) ? "?" (158, 22) ID "_isLibCleanSourceWith" (158, 24) ; ";" (158, 45) ID "origSrc" (159, 5) = "=" (159, 13) IF "if" (160, 7) ID "isFiltered" (160, 10) THEN "then" (161, 7) ID "src" (161, 12) . "." (161, 15) ID "origSrc" (161, 16) ELSE "else" (162, 7) ID "src" (162, 12) ; ";" (162, 15) IN "in" (163, 3) ID "lib" (164, 5) . "." (164, 8) ID "cleanSourceWith" (164, 9) { "{" (164, 25) ID "filter" (165, 7) = "=" (165, 14) ID "path" (165, 16) : ":" (165, 20) ID "type" (165, 22) : ":" (165, 26) LET "let" (165, 28) ID "relPath" (166, 9) = "=" (166, 17) ID "lib" (166, 19) . "." (166, 22) ID "removePrefix" (166, 23) ( "(" (166, 36) ID "toString" (166, 37) ID "origSrc" (166, 46) + "+" (166, 54) " "\"" (166, 56) STR "/" (166, 57) " "\"" (166, 58) ) ")" (166, 59) ( "(" (166, 61) ID "toString" (166, 62) ID "path" (166, 71) ) ")" (166, 75) ; ";" (166, 76) IN "in" (167, 7) ID "lib" (168, 9) . "." (168, 12) ID "any" (168, 13) ( "(" (168, 17) ID "re" (168, 18) : ":" (168, 20) ID "match" (168, 22) ID "re" (168, 28) ID "relPath" (168, 31) NEQ "!=" (168, 39) ID "null" (168, 42) ) ")" (168, 46) ID "regexes" (168, 48) ; ";" (168, 55) INHERIT "inherit" (169, 7) ID "src" (169, 15) ; ";" (169, 18) } "}" (170, 5) ; ";" (170, 6) ID "sourceFilesBySuffices" (183, 3) = "=" (183, 25) ID "src" (185, 5) : ":" (185, 8) ID "exts" (187, 5) : ":" (187, 9) LET "let" (187, 11) ID "filter" (188, 7) = "=" (188, 14) ID "name" (188, 16) : ":" (188, 20) ID "type" (188, 22) : ":" (188, 26) LET "let" (188, 28) ID "base" (189, 9) = "=" (189, 14) ID "baseNameOf" (189, 16) ( "(" (189, 27) ID "toString" (189, 28) ID "name" (189, 37) ) ")" (189, 41) ; ";" (189, 42) IN "in" (190, 7) ID "type" (191, 9) EQ "==" (191, 14) " "\"" (191, 17) STR "directory" (191, 18) " "\"" (191, 27) OR "||" (191, 29) ID "lib" (191, 32) . "." (191, 35) ID "any" (191, 36) ( "(" (191, 40) ID "ext" (191, 41) : ":" (191, 44) ID "lib" (191, 46) . "." (191, 49) ID "hasSuffix" (191, 50) ID "ext" (191, 60) ID "base" (191, 64) ) ")" (191, 68) ID "exts" (191, 70) ; ";" (191, 74) IN "in" (192, 5) ID "cleanSourceWith" (193, 7) { "{" (193, 23) INHERIT "inherit" (193, 24) ID "filter" (193, 32) ID "src" (193, 39) ; ";" (193, 42) } "}" (193, 43) ; ";" (193, 44) ID "pathIsGitRepo" (195, 3) = "=" (195, 17) ID "path" (195, 19) : ":" (195, 23) ( "(" (195, 25) ID "tryEval" (195, 26) ( "(" (195, 34) ID "commitIdFromGitRepo" (195, 35) ID "path" (195, 55) ) ")" (195, 59) ) ")" (195, 60) . "." (195, 61) ID "success" (195, 62) ; ";" (195, 69) ID "commitIdFromGitRepo" (202, 3) = "=" (202, 23) LET "let" (202, 25) ID "readCommitFromFile" (203, 5) = "=" (203, 24) ID "file" (203, 26) : ":" (203, 30) ID "path" (203, 32) : ":" (203, 36) LET "let" (203, 38) ID "fileName" (204, 7) = "=" (204, 16) ID "toString" (204, 18) ID "path" (204, 27) + "+" (204, 32) " "\"" (204, 34) STR "/" (204, 35) " "\"" (204, 36) + "+" (204, 38) ID "file" (204, 40) ; ";" (204, 44) ID "packedRefsName" (205, 7) = "=" (205, 22) ID "toString" (205, 24) ID "path" (205, 33) + "+" (205, 38) " "\"" (205, 40) STR "/packed-refs" (205, 41) " "\"" (205, 53) ; ";" (205, 54) ID "absolutePath" (206, 7) = "=" (206, 20) ID "base" (206, 22) : ":" (206, 26) ID "path" (206, 28) : ":" (206, 32) IF "if" (207, 9) ID "lib" (207, 12) . "." (207, 15) ID "hasPrefix" (207, 16) " "\"" (207, 26) STR "/" (207, 27) " "\"" (207, 28) ID "path" (207, 30) THEN "then" (208, 9) ID "path" (208, 14) ELSE "else" (209, 9) ID "toString" (209, 14) ( "(" (209, 23) PATH "/." (209, 24) PATH_END " " (209, 26) + "+" (209, 27) " "\"" (209, 29) DOLLAR_CURLY "${" (209, 30) ID "base" (209, 32) } "}" (209, 36) STR "/" (209, 37) DOLLAR_CURLY "${" (209, 38) ID "path" (209, 40) } "}" (209, 44) " "\"" (209, 45) ) ")" (209, 46) ; ";" (209, 47) IN "in" (210, 5) IF "if" (211, 7) ID "pathIsRegularFile" (211, 10) ID "path" (211, 28) THEN "then" (213, 7) LET "let" (213, 12) ID "m" (214, 9) = "=" (214, 11) ID "match" (214, 13) " "\"" (214, 19) STR "^gitdir: (.*)$" (214, 20) " "\"" (214, 34) ( "(" (214, 36) ID "lib" (214, 37) . "." (214, 40) ID "fileContents" (214, 41) ID "path" (214, 54) ) ")" (214, 58) ; ";" (214, 59) IN "in" (215, 7) IF "if" (216, 9) ID "m" (216, 12) EQ "==" (216, 14) ID "null" (216, 17) THEN "then" (217, 9) ID "throw" (217, 14) ( "(" (217, 20) " "\"" (217, 21) STR "File contains no gitdir reference: " (217, 22) " "\"" (217, 57) + "+" (217, 59) ID "path" (217, 61) ) ")" (217, 65) ELSE "else" (218, 9) LET "let" (218, 14) ID "gitDir" (219, 11) = "=" (219, 18) ID "absolutePath" (219, 20) ( "(" (219, 33) ID "dirOf" (219, 34) ID "path" (219, 40) ) ")" (219, 44) ( "(" (219, 46) ID "lib" (219, 47) . "." (219, 50) ID "head" (219, 51) ID "m" (219, 56) ) ")" (219, 57) ; ";" (219, 58) ID "commonDir''" (220, 11) = "=" (220, 23) IF "if" (221, 13) ID "pathIsRegularFile" (221, 16) " "\"" (221, 34) DOLLAR_CURLY "${" (221, 35) ID "gitDir" (221, 37) } "}" (221, 43) STR "/commondir" (221, 44) " "\"" (221, 54) THEN "then" (222, 13) ID "lib" (222, 18) . "." (222, 21) ID "fileContents" (222, 22) " "\"" (222, 35) DOLLAR_CURLY "${" (222, 36) ID "gitDir" (222, 38) } "}" (222, 44) STR "/commondir" (222, 45) " "\"" (222, 55) ELSE "else" (223, 13) ID "gitDir" (223, 18) ; ";" (223, 24) ID "commonDir'" (224, 11) = "=" (224, 22) ID "lib" (224, 24) . "." (224, 27) ID "removeSuffix" (224, 28) " "\"" (224, 41) STR "/" (224, 42) " "\"" (224, 43) ID "commonDir''" (224, 45) ; ";" (224, 56) ID "commonDir" (225, 11) = "=" (225, 21) ID "absolutePath" (225, 23) ID "gitDir" (225, 36) ID "commonDir'" (225, 43) ; ";" (225, 53) ID "refFile" (226, 11) = "=" (226, 19) ID "lib" (226, 21) . "." (226, 24) ID "removePrefix" (226, 25) " "\"" (226, 38) DOLLAR_CURLY "${" (226, 39) ID "commonDir" (226, 41) } "}" (226, 50) STR "/" (226, 51) " "\"" (226, 52) " "\"" (226, 54) DOLLAR_CURLY "${" (226, 55) ID "gitDir" (226, 57) } "}" (226, 63) STR "/" (226, 64) DOLLAR_CURLY "${" (226, 65) ID "file" (226, 67) } "}" (226, 71) " "\"" (226, 72) ; ";" (226, 73) IN "in" (227, 9) ID "readCommitFromFile" (228, 11) ID "refFile" (228, 30) ID "commonDir" (228, 38) ELSE "else" (229, 7) IF "if" (229, 12) ID "pathIsRegularFile" (229, 15) ID "fileName" (229, 33) THEN "then" (232, 7) LET "let" (232, 12) ID "fileContent" (233, 9) = "=" (233, 21) ID "lib" (233, 23) . "." (233, 26) ID "fileContents" (233, 27) ID "fileName" (233, 40) ; ";" (233, 48) ID "matchRef" (234, 9) = "=" (234, 18) ID "match" (234, 20) " "\"" (234, 26) STR "^ref: (.*)$" (234, 27) " "\"" (234, 38) ID "fileContent" (234, 40) ; ";" (234, 51) IN "in" (235, 7) IF "if" (236, 9) ID "matchRef" (236, 12) EQ "==" (236, 21) ID "null" (236, 24) THEN "then" (237, 9) ID "fileContent" (237, 14) ELSE "else" (238, 9) ID "readCommitFromFile" (238, 14) ( "(" (238, 33) ID "lib" (238, 34) . "." (238, 37) ID "head" (238, 38) ID "matchRef" (238, 43) ) ")" (238, 51) ID "path" (238, 53) ELSE "else" (239, 7) IF "if" (239, 12) ID "pathIsRegularFile" (239, 15) ID "packedRefsName" (239, 33) THEN "then" (242, 7) LET "let" (242, 12) ID "fileContent" (243, 9) = "=" (243, 21) ID "readFile" (243, 23) ID "packedRefsName" (243, 32) ; ";" (243, 46) ID "matchRef" (244, 9) = "=" (244, 18) ID "match" (244, 20) " "\"" (244, 26) STR "([a-z0-9]+) " (244, 27) DOLLAR_CURLY "${" (244, 39) ID "file" (244, 41) } "}" (244, 45) " "\"" (244, 46) ; ";" (244, 47) ID "isRef" (245, 9) = "=" (245, 15) ID "s" (245, 17) : ":" (245, 18) ID "isString" (245, 20) ID "s" (245, 29) AND "&&" (245, 31) ( "(" (245, 34) ID "matchRef" (245, 35) ID "s" (245, 44) ) ")" (245, 45) NEQ "!=" (245, 47) ID "null" (245, 50) ; ";" (245, 54) ID "refs" (248, 9) = "=" (248, 14) ID "filter" (248, 16) ID "isRef" (248, 23) ( "(" (248, 29) ID "split" (248, 30) " "\"" (248, 36) STR "\n" (248, 37) " "\"" (248, 39) ID "fileContent" (248, 41) ) ")" (248, 52) ; ";" (248, 53) IN "in" (249, 7) IF "if" (250, 9) ID "refs" (250, 12) EQ "==" (250, 17) [ "[" (250, 20) ] "]" (250, 21) THEN "then" (251, 9) ID "throw" (251, 14) ( "(" (251, 20) " "\"" (251, 21) STR "Could not find " (251, 22) " "\"" (251, 37) + "+" (251, 39) ID "file" (251, 41) + "+" (251, 46) " "\"" (251, 48) STR " in " (251, 49) " "\"" (251, 53) + "+" (251, 55) ID "packedRefsName" (251, 57) ) ")" (251, 71) ELSE "else" (252, 9) ID "lib" (252, 14) . "." (252, 17) ID "head" (252, 18) ( "(" (252, 23) ID "matchRef" (252, 24) ( "(" (252, 33) ID "lib" (252, 34) . "." (252, 37) ID "head" (252, 38) ID "refs" (252, 43) ) ")" (252, 47) ) ")" (252, 48) ELSE "else" (253, 7) ID "throw" (253, 12) ( "(" (253, 18) " "\"" (253, 19) STR "Not a .git directory: " (253, 20) " "\"" (253, 42) + "+" (253, 44) ID "path" (253, 46) ) ")" (253, 50) ; ";" (253, 51) IN "in" (254, 3) ID "readCommitFromFile" (255, 5) " "\"" (255, 24) STR "HEAD" (255, 25) " "\"" (255, 29) ; ";" (255, 30) ID "pathHasContext" (257, 3) = "=" (257, 18) ID "builtins" (257, 20) . "." (257, 28) ID "hasContext" (257, 29) OR_KW "or" (257, 40) ( "(" (257, 43) ID "lib" (257, 44) . "." (257, 47) ID "hasPrefix" (257, 48) ID "storeDir" (257, 58) ) ")" (257, 66) ; ";" (257, 67) ID "canCleanSource" (259, 3) = "=" (259, 18) ID "src" (259, 20) : ":" (259, 23) ID "src" (259, 25) ? "?" (259, 29) ID "_isLibCleanSourceWith" (259, 31) OR "||" (259, 53) ! "!" (259, 56) ( "(" (259, 57) ID "pathHasContext" (259, 58) ( "(" (259, 73) ID "toString" (259, 74) ID "src" (259, 83) ) ")" (259, 86) ) ")" (259, 87) ; ";" (259, 88) ID "toSourceAttributes" (272, 3) = "=" (272, 22) ID "src" (272, 24) : ":" (272, 27) LET "let" (272, 29) ID "isFiltered" (273, 5) = "=" (273, 16) ID "src" (273, 18) ? "?" (273, 22) ID "_isLibCleanSourceWith" (273, 24) ; ";" (273, 45) IN "in" (274, 3) { "{" (274, 6) ID "origSrc" (276, 5) = "=" (276, 13) IF "if" (277, 7) ID "isFiltered" (277, 10) THEN "then" (278, 7) ID "src" (278, 12) . "." (278, 15) ID "origSrc" (278, 16) ELSE "else" (279, 7) ID "src" (279, 12) ; ";" (279, 15) ID "filter" (280, 5) = "=" (280, 12) IF "if" (281, 7) ID "isFiltered" (281, 10) THEN "then" (282, 7) ID "src" (282, 12) . "." (282, 15) ID "filter" (282, 16) ELSE "else" (283, 7) ID "_" (283, 12) : ":" (283, 13) ID "_" (283, 15) : ":" (283, 16) ID "true" (283, 18) ; ";" (283, 22) ID "name" (284, 5) = "=" (284, 10) IF "if" (285, 7) ID "isFiltered" (285, 10) THEN "then" (286, 7) ID "src" (286, 12) . "." (286, 15) ID "name" (286, 16) ELSE "else" (287, 7) " "\"" (287, 12) STR "source" (287, 13) " "\"" (287, 19) ; ";" (287, 20) } "}" (288, 3) ; ";" (288, 4) ID "fromSourceAttributes" (293, 3) = "=" (293, 24) { "{" (293, 26) ID "origSrc" (294, 5) , "," (294, 12) ID "filter" (295, 5) , "," (295, 11) ID "name" (296, 5) , "," (296, 9) } "}" (297, 3) : ":" (297, 4) { "{" (297, 6) ID "_isLibCleanSourceWith" (298, 5) = "=" (298, 27) ID "true" (298, 29) ; ";" (298, 33) INHERIT "inherit" (299, 5) ID "origSrc" (299, 13) ID "filter" (299, 21) ID "name" (299, 28) ; ";" (299, 32) ID "outPath" (300, 5) = "=" (300, 13) ID "builtins" (300, 15) . "." (300, 23) ID "path" (300, 24) { "{" (300, 29) INHERIT "inherit" (301, 7) ID "filter" (301, 15) ID "name" (301, 22) ; ";" (301, 26) ID "path" (302, 7) = "=" (302, 12) ID "origSrc" (302, 14) ; ";" (302, 21) } "}" (303, 5) ; ";" (303, 6) } "}" (304, 3) ; ";" (304, 4) IN "in" (305, 1) { "{" (305, 4) INHERIT "inherit" (306, 3) ID "pathType" (307, 5) ID "pathIsDirectory" (308, 5) ID "pathIsRegularFile" (309, 5) ID "pathIsGitRepo" (310, 5) ID "commitIdFromGitRepo" (311, 5) ID "cleanSource" (312, 5) ID "cleanSourceWith" (313, 5) ID "cleanSourceFilter" (314, 5) ID "pathHasContext" (315, 5) ID "canCleanSource" (316, 5) ID "sourceByRegex" (317, 5) ID "sourceFilesBySuffices" (318, 5) ID "trace" (319, 5) ; ";" (320, 5) } "}" (321, 1)