File: Ident.hs

package info (click to toggle)
ghc 9.10.3-3
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 169,076 kB
  • sloc: haskell: 713,554; ansic: 84,184; cpp: 30,255; javascript: 9,003; sh: 7,870; fortran: 3,527; python: 3,228; asm: 2,523; makefile: 2,324; yacc: 1,570; lisp: 532; xml: 196; perl: 111; csh: 2
file content (58 lines) | stat: -rw-r--r-- 1,965 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
{-# LANGUAGE DerivingStrategies          #-}
{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-----------------------------------------------------------------------------
-- |
-- Module      :  GHC.JS.Ident
-- Copyright   :  (c) The University of Glasgow 2001
-- License     :  BSD-style (see the file LICENSE)
--
-- Maintainer  :  Jeffrey Young  <jeffrey.young@iohk.io>
--                Luite Stegeman <luite.stegeman@iohk.io>
--                Sylvain Henry  <sylvain.henry@iohk.io>
--                Josh Meredith  <josh.meredith@iohk.io>
-- Stability   :  experimental
--
--
-- * Domain and Purpose
--
--     GHC.JS.Ident defines identifiers for the JS backend. We keep this module
--     separate to prevent coupling between GHC and the backend and between
--     unrelated modules is the JS backend.
--
-- * Consumers
--
--     The entire JavaScript Backend consumes this module including modules in
--     GHC.JS.\* and modules in GHC.StgToJS.\*
--
-- * Additional Notes
--
--     This module should be kept as small as possible. Anything added to it
--     will be coupled to the JS backend EDSL and the JS Backend including the
--     linker and rts. You have been warned.
--
-----------------------------------------------------------------------------

module GHC.JS.Ident
  ( Ident(..)
  , global
  ) where

import Prelude

import GHC.Data.FastString
import GHC.Types.Unique

--------------------------------------------------------------------------------
--                            Identifiers
--------------------------------------------------------------------------------
-- We use FastString for identifiers in JS backend

-- | A newtype wrapper around 'FastString' for JS identifiers.
newtype Ident = TxtI { identFS :: FastString }
 deriving stock   (Show, Eq)
 deriving newtype (Uniquable)

-- | A not-so-smart constructor for @Ident@s, used to indicate that this name is
-- expected to be top-level
global :: FastString -> Ident
global = TxtI