Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

650 fix new.yaml #651

Open
wants to merge 50 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
50 commits
Select commit Hold shift + click to select a range
08b735e
fix(eo-phi-normalizer): do run dataization tests with new.yaml
deemp Dec 28, 2024
211ec7c
refactor(eo-phi-normalizer): format a test input
deemp Dec 28, 2024
663d90d
feat(scripts): add TODO
deemp Dec 31, 2024
14571ab
Merge remote-tracking branch 'origin' into 650-fix-newyaml
deemp Jan 10, 2025
6b8843b
feat(eo-phi-normalizer): temporarily commit updates to support the la…
deemp Jan 10, 2025
f6b742f
Merge remote-tracking branch 'origin' into 650-fix-newyaml
deemp Jan 27, 2025
5ac8c3b
fix(ci): don't check eo files
deemp Jan 27, 2025
5ad69c9
chore(eo): bump version 0.50.0 -> 0.50.1
deemp Jan 27, 2025
5e00240
fix(eo-phi-normalizer): allow application with a list of bindings
deemp Jan 27, 2025
ec3e5cc
fix(eo-phi-normalizer): improve validation
deemp Jan 27, 2025
2c9453b
fix(eo-phi-normalizer): use the correct obj
deemp Jan 29, 2025
0f23e37
refactor(eo-phi-normalizer):
deemp Jan 29, 2025
9ea7bfa
fix(eo-phi-normalizer): disable tests with yegor.yaml
deemp Jan 29, 2025
5bf8202
refactor(eo-phi-normalizer): move function
deemp Jan 29, 2025
6c2341f
fix(eo-phi-normalizer): remove a check
deemp Jan 29, 2025
9631ddd
fix(eo-phi-normalizer): desugaring and sugaring applications and form…
deemp Jan 29, 2025
036461b
fix(eo-phi-normalizer): check syntax in the first argument of applica…
deemp Jan 29, 2025
cb70456
fix(eo-phi-normalizer): add pragma
deemp Jan 29, 2025
098b952
fix(eo-phi-normalizer): add EmptyBindings Rho in data formation too
deemp Jan 30, 2025
4df2716
refactor(eo-phi-normalizer): extend pattern
deemp Jan 30, 2025
beea34c
refactor(eo-phi-normalizer): rename function
deemp Jan 30, 2025
f1a58e9
fix(eo-phi-normalizer): parse rules without desugaring pattern and re…
deemp Jan 30, 2025
ded592e
fix(eo-phi-normalizer): temporarily disable
deemp Jan 30, 2025
7080995
fix(eo-phi-normalizer): remove sugar from the rule
deemp Jan 30, 2025
814d259
fix(eo-phi-normalizer): correctly handle application with empty list …
deemp Jan 30, 2025
224fce1
fix(eo-phi-normalizer): desugar formation before desugaring the alpha…
deemp Jan 30, 2025
7e7f481
fix(eo-phi-normalizer): run more tests
deemp Jan 30, 2025
d3b32ea
fix(eo-phi-normalizer): remove parentheses that aren't produced by th…
deemp Jan 30, 2025
98e3e03
fix(eo-phi-normalizer):
deemp Jan 30, 2025
bc178a1
refactor(eo-phi-normalizer): remove unused code
deemp Jan 30, 2025
6e2504b
fix(eo-phi-normalizer): add export
deemp Jan 30, 2025
af8b2f6
fix(eo-phi-normalizer): update output because desugaring introduced a…
deemp Jan 30, 2025
81dc424
fix(eo-phi-normalizer): rule name
deemp Jan 30, 2025
245a5eb
fix(eo-phi-normalizer): assume a single step
deemp Jan 30, 2025
218d87e
refactor(eo-phi-normalizer): format
deemp Jan 31, 2025
40c76a0
chore(ci): Update pipeline/pipeline.lock
github-actions[bot] Jan 31, 2025
dfe353d
fix(ci): ignore eo/ files when checking copyright notes
deemp Jan 31, 2025
f11d67d
fix(eo-phi-normalizer): disable unsupported rules and conditions
deemp Jan 31, 2025
45211ab
fix(eo-phi-normalizer): remove old rules and related code
deemp Jan 31, 2025
295df4f
fix(eo-phi-normalizer): temporarily disable stuck tests
deemp Jan 31, 2025
f98b1d7
fix(eo-phi-normalizer):
deemp Feb 10, 2025
39c3fab
fix(eo-phi-normalizer):
deemp Feb 10, 2025
323410b
refactor(eo-phi-normalizer): format
deemp Feb 10, 2025
8e6fe0b
fix(eo-phi-normalizer):
deemp Feb 10, 2025
154fdf4
refactor(eo-phi-normalizer): remove rho attributes that'll be automat…
deemp Feb 10, 2025
e611c6f
feat(eo-phi-normalizer): add comment about rho in dispatched formations
deemp Feb 10, 2025
7014124
fix(eo-phi-normalizer):
deemp Feb 11, 2025
9c6b1d7
fix(eo-phi-normalizer): handle alpha bindings with attribute sugar mo…
deemp Feb 11, 2025
75a524a
refactor(eo-phi-normalizer):
deemp Feb 13, 2025
b9624e4
feat(eo-phi-normalizer): add test for a sequence of applications
deemp Feb 13, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/workflows/ghc.yml
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@ jobs:
**/*.sh
**/*.cf
ignore: >-
eo/**/*
**/.pre-commit-config.yaml
**/run-fourmolu.sh
**/Abs.hs
Expand Down
2 changes: 1 addition & 1 deletion eo
Submodule eo updated 926 files
7 changes: 3 additions & 4 deletions eo-phi-normalizer/app/Main.hs
Original file line number Diff line number Diff line change
Expand Up @@ -81,9 +81,8 @@ import Language.EO.Phi.Report.Data (makeProgramReport, makeReport)
import Language.EO.Phi.Report.Html (reportCSS, reportJS, toStringReport)
import Language.EO.Phi.Rules.Common (ApplicationLimits (ApplicationLimits), Context (..), LogEntry (..), applyRulesChainWith', applyRulesWith, objectSize)
import Language.EO.Phi.Rules.Fast (fastYegorInsideOut, fastYegorInsideOutAsRule)
import Language.EO.Phi.Rules.RunYegor (yegorRuleSet)
import Language.EO.Phi.Rules.Yaml (RuleSet (rules, title), convertRuleNamed, parseRuleSetFromFile)
import Language.EO.Phi.Syntax (SugarableFinally, desugar, errorExpectedDesugaredObject, printTreeDontSugar, wrapBytesInBytes, wrapTermination)
import Language.EO.Phi.Syntax (SugarableFinally, desugar, errorExpectedDesugaredObject, printTreeNoSugar, wrapBytesInBytes, wrapTermination)
import Language.EO.Phi.ToLaTeX
import Language.EO.Test.YamlSpec (spec)
import Options.Applicative hiding (metavar)
Expand Down Expand Up @@ -584,7 +583,7 @@ wrapRawBytesIn = \case
obj@ConstFloatRaw{} -> errorExpectedDesugaredObject obj

printSugarable :: (Pretty a, SugarableFinally a) => Bool -> a -> String
printSugarable noSugar = if noSugar then printTreeDontSugar else printTree
printSugarable noSugar = if noSugar then printTreeNoSugar else printTree

printAsProgramOrAsObject :: Bool -> Object -> String
printAsProgramOrAsObject noSugar = \case
Expand All @@ -604,7 +603,7 @@ main = withCorrectLocale do
logStrLn $ encodeToJSONString metrics
CLI'PrintRules' CLI'PrintRules{..} -> do
(logStrLn, _) <- getLoggers Nothing
rules <- rules <$> maybe (return yegorRuleSet) parseRuleSetFromFile rulesPath
rules <- rules <$> maybe (decodeThrow $(embedFileRelative "test/eo/phi/rules/new.yaml")) parseRuleSetFromFile rulesPath
let toLatex' = if compact then rulesToLatexCompact else toLatex
logStrLn $ show $ toLatex' rules
CLI'RewritePhi' CLI'RewritePhi{..} -> do
Expand Down
3 changes: 0 additions & 3 deletions eo-phi-normalizer/eo-phi-normalizer.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -398,7 +398,6 @@ extra-source-files:
test/eo/phi/rewriting.yaml
test/eo/phi/rules/new.yaml
test/eo/phi/rules/streams.yaml
test/eo/phi/rules/yegor.yaml

source-repository head
type: git
Expand Down Expand Up @@ -436,7 +435,6 @@ library
Language.EO.Phi.Report.Html
Language.EO.Phi.Rules.Common
Language.EO.Phi.Rules.Fast
Language.EO.Phi.Rules.RunYegor
Language.EO.Phi.Rules.Yaml
Language.EO.Phi.Syntax
Language.EO.Phi.Syntax.Abs
Expand Down Expand Up @@ -568,7 +566,6 @@ test-suite doctests
Language.EO.Phi.Report.Html
Language.EO.Phi.Rules.Common
Language.EO.Phi.Rules.Fast
Language.EO.Phi.Rules.RunYegor
Language.EO.Phi.Rules.Yaml
Language.EO.Phi.Syntax
Language.EO.Phi.Syntax.Abs
Expand Down
2 changes: 1 addition & 1 deletion eo-phi-normalizer/src/Language/EO/Phi/Metrics/Collect.hs
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@ getThisObjectMetrics obj = execState (inspect obj) mempty
--
-- If no object is accessible by the path, return the path that led to a non-formation.
-- >>> flip getObjectByPath ["org", "eolang"] "⟦ org ↦ ⟦ eolang ↦ ⟦ x ↦ ⟦ φ ↦ Φ.org.eolang.bool ( α0 ↦ Φ.org.eolang.bytes (Δ ⤍ 01-) ) ⟧, z ↦ ⟦ y ↦ ⟦ x ↦ ∅, φ ↦ ξ.x ⟧, φ ↦ Φ.org.eolang.bool ( α0 ↦ Φ.org.eolang.bytes (Δ ⤍ 01-) ) ⟧, λ ⤍ Package ⟧, λ ⤍ Package ⟧⟧"
-- Right (Formation [AlphaBinding (AttributeNoSugar (Label (LabelId "x"))) (Formation [AlphaBinding (AttributeNoSugar Phi) (Application (ObjectDispatch (ObjectDispatch (ObjectDispatch GlobalObject (Label (LabelId "org"))) (Label (LabelId "eolang"))) (Label (LabelId "bool"))) [AlphaBinding (AttributeNoSugar (Alpha (AlphaIndex "\945\&0"))) (Application (ObjectDispatch (ObjectDispatch (ObjectDispatch GlobalObject (Label (LabelId "org"))) (Label (LabelId "eolang"))) (Label (LabelId "bytes"))) [DeltaBinding (Bytes "01-")])])]),AlphaBinding (AttributeNoSugar (Label (LabelId "z"))) (Formation [AlphaBinding (AttributeNoSugar (Label (LabelId "y"))) (Formation [EmptyBinding (Label (LabelId "x")),AlphaBinding (AttributeNoSugar Phi) (ObjectDispatch ThisObject (Label (LabelId "x")))]),AlphaBinding (AttributeNoSugar Phi) (Application (ObjectDispatch (ObjectDispatch (ObjectDispatch GlobalObject (Label (LabelId "org"))) (Label (LabelId "eolang"))) (Label (LabelId "bool"))) [AlphaBinding (AttributeNoSugar (Alpha (AlphaIndex "\945\&0"))) (Application (ObjectDispatch (ObjectDispatch (ObjectDispatch GlobalObject (Label (LabelId "org"))) (Label (LabelId "eolang"))) (Label (LabelId "bytes"))) [DeltaBinding (Bytes "01-")])])]),LambdaBinding (Function "Package")])
-- Right (Formation [AlphaBinding (AttributeNoSugar (Label (LabelId "x"))) (Formation [AlphaBinding (AttributeNoSugar Phi) (Application (ObjectDispatch (ObjectDispatch (ObjectDispatch GlobalObject (Label (LabelId "org"))) (Label (LabelId "eolang"))) (Label (LabelId "bool"))) [AlphaBinding (AttributeNoSugar (Alpha (AlphaIndex "\945\&0"))) (Application (ObjectDispatch (ObjectDispatch (ObjectDispatch GlobalObject (Label (LabelId "org"))) (Label (LabelId "eolang"))) (Label (LabelId "bytes"))) [DeltaBinding (Bytes "01-")])]),EmptyBinding Rho]),AlphaBinding (AttributeNoSugar (Label (LabelId "z"))) (Formation [AlphaBinding (AttributeNoSugar (Label (LabelId "y"))) (Formation [EmptyBinding (Label (LabelId "x")),AlphaBinding (AttributeNoSugar Phi) (ObjectDispatch ThisObject (Label (LabelId "x"))),EmptyBinding Rho]),AlphaBinding (AttributeNoSugar Phi) (Application (ObjectDispatch (ObjectDispatch (ObjectDispatch GlobalObject (Label (LabelId "org"))) (Label (LabelId "eolang"))) (Label (LabelId "bool"))) [AlphaBinding (AttributeNoSugar (Alpha (AlphaIndex "\945\&0"))) (Application (ObjectDispatch (ObjectDispatch (ObjectDispatch GlobalObject (Label (LabelId "org"))) (Label (LabelId "eolang"))) (Label (LabelId "bytes"))) [DeltaBinding (Bytes "01-")])]),EmptyBinding Rho]),LambdaBinding (Function "Package"),EmptyBinding Rho])
--
-- >>> flip getObjectByPath ["a"] "⟦ a ↦ ⟦ b ↦ ⟦ c ↦ ∅, d ↦ ⟦ φ ↦ ξ.ρ.c ⟧ ⟧, e ↦ ξ.b(c ↦ ⟦⟧).d ⟧.e ⟧"
-- Left ["a"]
Expand Down
6 changes: 0 additions & 6 deletions eo-phi-normalizer/src/Language/EO/Phi/Preprocess.hs
Original file line number Diff line number Diff line change
Expand Up @@ -129,9 +129,3 @@ preprocess' sep = concat . addPrefix sep

preprocess :: String -> String
preprocess = preprocess' parseAlphaBindingSugar

input1 :: String
input1 = "{⟦ org ↦ ⟦ ⟧(α0 ↦ !b1) ⟧}"

-- >>> preprocess input1
-- "{\10214 #org \8614 \10214 \10215(#\945\&0 \8614 !b1) \10215}"
10 changes: 4 additions & 6 deletions eo-phi-normalizer/src/Language/EO/Phi/Rules/Common.hs
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ import Language.EO.Phi.Syntax (
desugar,
errorExpectedDesugaredBinding,
errorExpectedDesugaredObject,
isRhoBinding,
printTree,
pattern AlphaBinding',
pattern AlphaBinding'',
Expand Down Expand Up @@ -173,7 +174,7 @@ withSubObjectBindings f ctx (b : bs) =
withSubObjectBinding :: (Context -> Object -> [(String, Object)]) -> Context -> Binding -> [(String, Binding)]
withSubObjectBinding f ctx = \case
AlphaBinding' a obj -> propagateName1 (AlphaBinding' a) <$> withSubObject f (ctx{currentAttr = a}) obj
b@AlphaBinding{} -> errorExpectedDesugaredBinding b
b@AlphaBinding''{} -> errorExpectedDesugaredBinding b
b@AlphaBindingSugar{} -> errorExpectedDesugaredBinding b
EmptyBinding{} -> []
DeltaBinding{} -> []
Expand Down Expand Up @@ -232,7 +233,8 @@ objectSize = \case

bindingSize :: Binding -> Int
bindingSize = \case
AlphaBinding _attr obj -> objectSize obj
AlphaBinding' _attr obj -> objectSize obj
b@AlphaBinding''{} -> errorExpectedDesugaredBinding b
EmptyBinding _attr -> 1
DeltaBinding _bytes -> 1
DeltaEmptyBinding -> 1
Expand Down Expand Up @@ -426,10 +428,6 @@ objectBindings (Application obj bs) = objectBindings obj ++ bs
objectBindings (ObjectDispatch obj _attr) = objectBindings obj
objectBindings _ = []

isRhoBinding :: Binding -> Bool
isRhoBinding (AlphaBinding' Rho _) = True
isRhoBinding _ = False

hideRhoInBinding :: Binding -> Binding
hideRhoInBinding = \case
AlphaBinding a obj -> AlphaBinding a (hideRho obj)
Expand Down
43 changes: 0 additions & 43 deletions eo-phi-normalizer/src/Language/EO/Phi/Rules/RunYegor.hs

This file was deleted.

50 changes: 38 additions & 12 deletions eo-phi-normalizer/src/Language/EO/Phi/Rules/Yaml.hs
Original file line number Diff line number Diff line change
Expand Up @@ -23,13 +23,16 @@
{- FOURMOLU_ENABLE -}
{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DerivingStrategies #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE OverloadedLabels #-}
{-# LANGUAGE OverloadedRecordDot #-}
{-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE TypeApplications #-}
{-# OPTIONS_GHC -Wno-forall-identifier #-}
{-# OPTIONS_GHC -Wno-orphans #-}
Expand Down Expand Up @@ -61,6 +64,7 @@
-- >>> :set -XOverloadedStrings
-- >>> :set -XOverloadedLists

instance FromJSON Program where parseJSON = fmap fromString . parseJSON
instance FromJSON Object where parseJSON = fmap fromString . parseJSON
instance FromJSON Binding where parseJSON = fmap fromString . parseJSON

Expand All @@ -79,6 +83,11 @@
instance FromJSON LabelId
instance FromJSON AlphaIndex

deriving newtype instance FromJSON Bytes

instance FromJSON (NoDesugar Program) where parseJSON = fmap fromString . parseJSON
instance FromJSON (NoDesugar Object) where parseJSON = fmap fromString . parseJSON

data RuleSet = RuleSet
{ title :: String
, rules :: [Rule]
Expand All @@ -96,9 +105,9 @@
{ name :: String
, description :: String
, context :: Maybe RuleContext
, forall :: Maybe [MetaId]

Check failure on line 108 in eo-phi-normalizer/src/Language/EO/Phi/Rules/Yaml.hs

View workflow job for this annotation

GitHub Actions / Run static checks

Error: Parse error: on input `forall' ▫︎ Found: " , description :: String\n , context :: Maybe RuleContext\n> , forall :: Maybe [MetaId]\n , pattern :: NoDesugar Object\n , result :: NoDesugar Object\n"
, pattern :: Object
, result :: Object
, pattern :: NoDesugar Object
, result :: NoDesugar Object
, fresh :: Maybe [FreshMetaId]
, when :: Maybe [Condition]
, tests :: Maybe [RuleTest]
Expand All @@ -122,6 +131,7 @@
newtype RuleTestOption = TakeOne {take_one :: Bool}
-- deriving (Generic, Show, FromJSON)
deriving (Eq, Generic, Show)

instance FromJSON RuleTestOption where
parseJSON = genericParseJSON defaultOptions{sumEncoding = UntaggedValue}

Expand All @@ -130,6 +140,7 @@
, bindings :: [Binding]
}
deriving (Generic, Show, FromJSON)

data Condition
= IsNF {nf :: Object}
| IsNFInsideFormation {nf_inside_formation :: Object}
Expand All @@ -139,6 +150,7 @@
| ApplyInSubformations {apply_in_subformations :: Bool}
| ApplyInAbstractSubformations {apply_in_abstract_subformations :: Bool}
deriving (Generic, Show)

instance FromJSON Condition where
parseJSON = genericParseJSON defaultOptions{sumEncoding = UntaggedValue}

Expand All @@ -153,8 +165,8 @@
Set.mapMonotonic MetaIdLabel $
foldMap (Set.fromList . map (\FreshMetaId{name = x} -> x)) fresh

patternMetaIds = objectMetaIds pattern
resultMetaIds = objectMetaIds result
patternMetaIds = objectMetaIds pattern.noDesugar
resultMetaIds = objectMetaIds result.noDesugar

unusedFreshMetaIds = Set.difference freshMetaIds resultMetaIds

Expand All @@ -179,8 +191,8 @@
error ("invalid rule: result uses meta variables not quantified by the forall or the fresh: " <> ppMetaIds unquantifiedResultMetaIds)

contextSubsts <- matchContext ctx context
let pattern' = applySubst contextSubsts pattern
result' = applySubst contextSubsts result
let pattern' = applySubst contextSubsts pattern.noDesugar
result' = applySubst contextSubsts result.noDesugar
subst <- matchObject pattern' obj
guard $ all (\cond -> checkCond ctx cond (contextSubsts <> subst)) (fromMaybe [] when)
let substFresh = mkFreshSubst ctx result' fresh
Expand Down Expand Up @@ -249,7 +261,7 @@
bindingLabelIds :: Binding -> Set LabelId
bindingLabelIds = \case
AlphaBinding' a obj -> objectLabelIds obj <> attrLabelIds a
b@AlphaBinding{} -> errorExpectedDesugaredBinding b
b@AlphaBinding''{} -> errorExpectedDesugaredBinding b
DeltaBinding _bytes -> mempty
EmptyBinding a -> attrLabelIds a
DeltaEmptyBinding -> mempty
Expand Down Expand Up @@ -301,7 +313,7 @@

bindingMetaIds :: Binding -> Set MetaId
bindingMetaIds (AlphaBinding' attr obj) = attrMetaIds attr <> objectMetaIds obj
bindingMetaIds b@AlphaBinding{} = errorExpectedDesugaredBinding b
bindingMetaIds b@AlphaBinding''{} = errorExpectedDesugaredBinding b
bindingMetaIds (EmptyBinding attr) = attrMetaIds attr
bindingMetaIds (DeltaBinding _) = mempty
bindingMetaIds DeltaEmptyBinding = mempty
Expand Down Expand Up @@ -419,6 +431,7 @@
, bytesMetas :: [(BytesMetaId, Bytes)]
, contextMetas :: [(TailMetaId, OneHoleContext)]
}

instance Show Subst where
show Subst{..} =
intercalate
Expand Down Expand Up @@ -486,7 +499,7 @@
applySubstBinding subst@Subst{..} = \case
AlphaBinding' a obj ->
[AlphaBinding' (applySubstAttr subst a) (applySubst subst obj)]
b@AlphaBinding{} -> errorExpectedDesugaredBinding b
b@AlphaBinding''{} -> errorExpectedDesugaredBinding b
EmptyBinding a ->
[EmptyBinding (applySubstAttr subst a)]
DeltaBinding bytes -> [DeltaBinding (coerce bytes)]
Expand Down Expand Up @@ -674,6 +687,7 @@
substThisBinding :: Object -> Binding -> Binding
substThisBinding obj = \case
AlphaBinding a obj' -> AlphaBinding a (substThis obj obj')
b@AlphaBinding''{} -> errorExpectedDesugaredBinding b
EmptyBinding a -> EmptyBinding a
DeltaBinding bytes -> DeltaBinding bytes
DeltaEmptyBinding -> DeltaEmptyBinding
Expand All @@ -682,15 +696,26 @@
b@MetaDeltaBinding{} -> error ("impossible: trying to substitute ξ in " <> printTree b)
b@AlphaBindingSugar{} -> errorExpectedDesugaredBinding b

contextualize :: Object -> Object -> Object
contextualize ::
-- | current object
Object ->
-- | expression
Object ->
Object
contextualize thisObj = go
where
go = \case
ThisObject -> thisObj -- ξ is substituted
-- C1
-- TODO #651:10m Currently, causes infinite recursion. Create an issue. Maybe need to add functionality to the rules to check that contextualization result can be rewritten to a normal form.
GlobalObject -> GlobalObject
-- C2
ThisObject -> thisObj
-- C3
obj@(Formation _bindings) -> obj
-- C4
ObjectDispatch obj a -> ObjectDispatch (go obj) a
-- C5
Application obj bindings -> Application (go obj) (map (contextualizeBinding thisObj) bindings)
GlobalObject -> GlobalObject -- TODO: Change to what GlobalObject is attached to
obj@GlobalObjectPhiOrg -> errorExpectedDesugaredObject obj
Termination -> Termination
obj@MetaTailContext{} -> error ("impossible: trying to contextualize " <> printTree obj)
Expand All @@ -708,6 +733,7 @@
contextualizeBinding :: Object -> Binding -> Binding
contextualizeBinding obj = \case
AlphaBinding a obj' -> AlphaBinding a (contextualize obj obj')
b@AlphaBinding''{} -> errorExpectedDesugaredBinding b
EmptyBinding a -> EmptyBinding a
DeltaBinding bytes -> DeltaBinding bytes
DeltaEmptyBinding -> DeltaEmptyBinding
Expand Down
Loading
Loading