tricu

An interpreted language for exploring Tree Calculus
Log | Files | Refs | README | LICENSE

312ea8b6e30c7c16bbcd516e8f9e9b7c475a53c9390c2ce5c40cc9299be7d496.tri (7446B)


      1 !import prelude *
      2 !import parser *
      3 !import graph *
      4 !import source_program *
      5 !import source_resolve *
      6 !import source_ast *
      7 !import source_equations *
      8 !export *
      9 
     10 sourceFindDefinition_ self definitions name =
     11   lazyList
     12     (_ : nothing)
     13     (definition rest :
     14       lazyBool
     15         (_ : just definition)
     16         (_ : self rest name)
     17         (equal? (sourceDefinitionName definition) name))
     18     definitions
     19 
     20 sourceFindDefinition = (definitions name :
     21   y sourceFindDefinition_ definitions name)
     22 
     23 -- Free-name collection returns located name AST nodes, so a missing-name
     24 -- diagnostic retains the original source position rather than a string key.
     25 sourceFreeList_ self elements visit bound =
     26   lazyList
     27     (_ : t)
     28     (element rest : append (visit element bound) (self rest visit bound))
     29     elements
     30 
     31 sourceFreeList = (elements visit bound :
     32   y sourceFreeList_ elements visit bound)
     33 
     34 sourceFreeEquations_ self equations visit bound = (lazyList (_ : t)
     35   (equation rest : append
     36     (append (sourceFreeList
     37       (sourceEquationCollect (fst equation) sourceEquationPins) visit bound)
     38       (visit (snd equation)
     39         (append (reverse (sourceEquationCollect (fst equation) sourceEquationCaptures)) bound)))
     40     (self rest visit bound)) equations)
     41 sourceFreeEquations equations visit bound = y sourceFreeEquations_ equations visit bound
     42 
     43 sourceFreeNames_ self node bound =
     44   lazyBool
     45     (_ : lazyMaybe
     46       (_ : pair node t)
     47       (index : t)
     48       (sourceFindBinder bound (sourceAstPayload node)))
     49     (_ : lazyBool
     50       (_ : append
     51         (self (fst (sourceAstPayload node)) bound)
     52         (self (snd (sourceAstPayload node)) bound))
     53       (_ : lazyBool
     54         (_ : self (snd (sourceAstPayload node))
     55           (pair (fst (sourceAstPayload node)) bound))
     56         (_ : lazyBool
     57           (_ : self (sourceAstPayload node) bound)
     58           (_ : lazyBool
     59             (_ : sourceFreeList (sourceAstPayload node) self bound)
     60             (_ : lazyBool
     61               (_ : append
     62                 (self (sourceAstLetValue node) bound)
     63                 (self (sourceAstLetBody node)
     64                   (pair (sourceAstLetName node) bound)))
     65               (_ : lazyBool
     66                 (_ : append
     67                   (self (sourceAstPipeLeft node) bound)
     68                   (self (sourceAstPipeRight node) bound))
     69                 (_ : lazyBool
     70                   (_ : self (sourceAstDoLower node) bound)
     71                   (_ : lazyBool
     72                     (_ : sourceFreeEquations (sourceAstPayload node) self bound)
     73                     (_ : t) (equal? (sourceAstKind node) sourceAstEquationsKind))
     74                   (equal? (sourceAstKind node) sourceAstDoKind))
     75                 (equal? (sourceAstKind node) sourceAstPipeKind))
     76               (equal? (sourceAstKind node) sourceAstLetKind))
     77             (equal? (sourceAstKind node) sourceAstListKind))
     78           (equal? (sourceAstKind node) sourceAstGroupKind))
     79         (equal? (sourceAstKind node) sourceAstLambdaKind))
     80       (equal? (sourceAstKind node) sourceAstApplyKind))
     81     (equal? (sourceAstKind node) sourceAstNameKind)
     82 
     83 sourceFreeNames = (node : y sourceFreeNames_ node t)
     84 
     85 sourceCheckDuplicates_ self definitions seen =
     86   lazyList
     87     (_ : ok t t)
     88     (definition rest :
     89       lazyMaybe
     90         (_ : self rest (pair definition seen))
     91         (prior : err
     92           (parserDiagnostic 30 (sourceDefinitionName definition)
     93             (sourceDefinitionName prior)
     94             (sourceDefinitionPosition definition) t)
     95           definition)
     96         (sourceFindDefinition seen (sourceDefinitionName definition)))
     97     definitions
     98 
     99 sourceCheckDuplicates = (definitions : y sourceCheckDuplicates_ definitions t)
    100 
    101 sourceCheckNames_ self names definitions environment =
    102   lazyList
    103     (_ : ok t t)
    104     (node rest :
    105       lazyMaybe
    106         (_ : lazyMaybe
    107           (_ : err
    108             (parserDiagnostic 20 (sourceAstPayload node) t
    109               (sourceAstStart node) t)
    110             node)
    111           (value : self rest definitions environment)
    112           (sourceFindExternal environment (sourceAstPayload node)))
    113         (definition : self rest definitions environment)
    114         (sourceFindDefinition definitions (sourceAstPayload node)))
    115     names
    116 
    117 sourceCheckNames = (names definitions environment :
    118   y sourceCheckNames_ names definitions environment)
    119 
    120 sourceCheckDefinitionNames_ self pending definitions environment =
    121   lazyList
    122     (_ : ok t t)
    123     (definition rest :
    124       lazyResult
    125         (diagnostic node : err diagnostic node)
    126         (ignored unused : self rest definitions environment)
    127         (lazyResult (diagnostic remainder : err diagnostic remainder)
    128           (_ unused : sourceCheckNames (sourceFreeNames (sourceDefinitionBody definition))
    129             definitions environment)
    130           (sourceEquationValidate (sourceDefinitionBody definition))))
    131     pending
    132 
    133 sourceCheckDefinitionNames = (definitions environment :
    134   y sourceCheckDefinitionNames_ definitions definitions environment)
    135 
    136 sourceCheckFinalNames final definitions environment =
    137   lazyMaybe
    138     (_ : ok t t)
    139     (expression : lazyResult (diagnostic remainder : err diagnostic remainder)
    140       (_ unused : sourceCheckNames (sourceFreeNames expression) definitions environment)
    141       (sourceEquationValidate expression))
    142     final
    143 
    144 sourceDependencyNames_ self names definitions =
    145   lazyList
    146     (_ : t)
    147     (node rest :
    148       lazyMaybe
    149         (_ : self rest definitions)
    150         (definition : pair (sourceAstPayload node) (self rest definitions))
    151         (sourceFindDefinition definitions (sourceAstPayload node)))
    152     names
    153 
    154 sourceDependencyNames = (names definitions :
    155   y sourceDependencyNames_ names definitions)
    156 
    157 sourceDefinitionGraph_ self pending definitions =
    158   lazyList
    159     (_ : t)
    160     (definition rest :
    161       pair
    162         (pair (sourceDefinitionName definition)
    163           (sourceDependencyNames
    164             (sourceFreeNames (sourceDefinitionBody definition)) definitions))
    165         (self rest definitions))
    166     pending
    167 
    168 sourceDefinitionGraph = (definitions :
    169   y sourceDefinitionGraph_ definitions definitions)
    170 
    171 sourceOrderCycle definitions name =
    172   lazyMaybe
    173     (_ : parserDiagnostic 31 "acyclic" name t (pair name t))
    174     (definition : parserDiagnostic 31 "acyclic" name
    175       (sourceDefinitionPosition definition) (pair name t))
    176     (sourceFindDefinition definitions name)
    177 
    178 orderGateProgram environment program =
    179   lazyResult
    180     (diagnostic rest : err diagnostic rest)
    181     (unused rest :
    182       lazyResult
    183         (diagnostic duplicate : err diagnostic duplicate)
    184         (ignored unused :
    185           lazyResult
    186             (diagnostic missing : err diagnostic missing)
    187             (ignored unused :
    188               lazyResult
    189                 (cycle unused : err (sourceOrderCycle
    190                   (sourceProgramDefinitions program) cycle) t)
    191                 (names unused : ok names t)
    192                 (graphSort (sourceDefinitionGraph
    193                   (sourceProgramDefinitions program))))
    194             (sourceCheckFinalNames (sourceProgramFinal program)
    195               (sourceProgramDefinitions program) environment))
    196         (sourceCheckDefinitionNames
    197           (sourceProgramDefinitions program) environment))
    198     (sourceCheckDuplicates (sourceProgramDefinitions program))
    199 
    200 orderGateSource environment characters =
    201   parserMatchReply
    202     (diagnostic rest consumed committed : err diagnostic rest)
    203     (program rest consumed committed : orderGateProgram environment program)
    204     (parseGateProgram characters)
    205