Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
7
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Open sidebar
clean-and-itasks
clean-platform
Commits
d17e6741
Verified
Commit
d17e6741
authored
Oct 06, 2018
by
Camil Staps
🐟
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Move guessModuleName to Clean.Parse.ModuleName so that it can be used without compiler sources
parent
0630d34f
Pipeline
#14653
passed with stage
in 1 minute and 8 seconds
Changes
6
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
71 additions
and
54 deletions
+71
-54
src/libraries/OS-Independent/Clean/ModuleFinder.icl
src/libraries/OS-Independent/Clean/ModuleFinder.icl
+1
-1
src/libraries/OS-Independent/Clean/Parse.dcl
src/libraries/OS-Independent/Clean/Parse.dcl
+0
-12
src/libraries/OS-Independent/Clean/Parse.icl
src/libraries/OS-Independent/Clean/Parse.icl
+1
-41
src/libraries/OS-Independent/Clean/Parse/ModuleName.dcl
src/libraries/OS-Independent/Clean/Parse/ModuleName.dcl
+17
-0
src/libraries/OS-Independent/Clean/Parse/ModuleName.icl
src/libraries/OS-Independent/Clean/Parse/ModuleName.icl
+51
-0
tests/linux64/test.icl
tests/linux64/test.icl
+1
-0
No files found.
src/libraries/OS-Independent/Clean/ModuleFinder.icl
View file @
d17e6741
...
...
@@ -4,7 +4,7 @@ import StdArray
import
StdList
import
StdString
import
Clean
.
Parse
import
Clean
.
Parse
.
ModuleName
import
Data
.
Error
from
Data
.
Func
import
$,
mapSt
import
System
.
Directory
...
...
src/libraries/OS-Independent/Clean/Parse.dcl
View file @
d17e6741
...
...
@@ -7,24 +7,12 @@ definition module Clean.Parse
from
Data
.
Error
import
::
MaybeError
from
Data
.
Maybe
import
::
Maybe
from
System
.
File
import
::
FileError
from
System
.
FilePath
import
::
FilePath
from
hashtable
import
::
HashTable
from
Heap
import
::
Heap
from
syntax
import
::
Module
,
::
ParsedDefinition
,
::
ParsedModule
/**
* Guess the module name of a Clean file.
*
* @param The path to the Clean file
* @result
* `Error`, if the file could not be read;
* `Ok Nothing`, if the module name could not be guessed;
* `Ok (Just name)` in case of success.
*/
guessModuleName
::
!
FilePath
!*
World
->
*(!
MaybeError
FileError
(
Maybe
String
),
!*
World
)
/**
* Parse a Clean module.
*
...
...
src/libraries/OS-Independent/Clean/Parse.icl
View file @
d17e6741
...
...
@@ -3,8 +3,7 @@ implementation module Clean.Parse
// NOTE: be VERY restrictive with adding imports here, because this may break
// the module when the compiler changes.
import
StdFile
import
Clean
.
Parse
.
ModuleName
import
Data
.
Error
import
Data
.
Maybe
import
System
.
File
...
...
@@ -17,13 +16,6 @@ from hashtable import :: BoxedIdent{boxed_ident}, :: HashTable,
from
parse
import
wantModule
import
syntax
guessModuleName
::
!
FilePath
!*
World
->
*(!
MaybeError
FileError
(
Maybe
String
),
!*
World
)
guessModuleName
filename
w
#
(
s
,
w
)
=
readFile
filename
w
|
isError
s
=
(
Error
(
fromError
s
),
w
)
#
modname
=
getModuleName
(
fromString
(
fromOk
s
))
=
(
Ok
modname
,
w
)
readModule
::
!
FilePath
!*
World
->
*(!
MaybeError
String
(
ParsedModule
,
HashTable
),
!*
World
)
readModule
filename
w
#
(
modname
,
w
)
=
guessModuleName
filename
w
...
...
@@ -46,35 +38,3 @@ where
wantModule`
f
s
b1
i
p
b2
ht
io
fs
#
(
b1
,
b2
,
pm
,
ht
,
f
,
fs
)
=
wantModule
f
s
b1
i
p
b2
ht
io
fs
=
((
b1
,
b2
,
pm
,
ht
,
f
),
fs
)
// A reasonably accurate simple scanner to get the module name from the file
getModuleName
::
![
Char
]
->
Maybe
String
getModuleName
['
definition
':
c
:
cs
]
|
isSpace
c
=
justModule
cs
getModuleName
['
implementation
':
c
:
cs
]
|
isSpace
c
=
justModule
cs
getModuleName
['
system
':
c
:
cs
]
|
isSpace
c
=
justModule
cs
getModuleName
[
c
:
cs
]
|
isSpace
c
=
getModuleName
cs
getModuleName
['
//':cs] = getModuleName (dropWhile ((<>) '\n') cs)
getModuleName
['
/*':cs] = getModuleName (skipMultiLineComment cs)
getModuleName cs = justModule cs
justModule :: ![Char] -> Maybe String
justModule ['module':c:cs] | isSpace c = justModuleName cs
justModule [c:cs] | isSpace c = justModule cs
justModule ['//':cs] = justModule (dropWhile ((<>) '\n') cs)
justModule ['/*':cs] = justModule (skipMultiLineComment cs)
justModule _ = Nothing
justModuleName :: ![Char] -> Maybe String
justModuleName cs
# (_,cs) = span isSpace cs
# (name,_) = span (\c -> c <> '/' && c <> ';' && not (isSpace c)) cs
= case name of
[] -> Nothing
_ -> Just (toString name)
skipMultiLineComment :: ![Char] -> [Char]
skipMultiLineComment ['*/':cs] = cs
skipMultiLineComment ['/*':cs] = skipMultiLineComment (skipMultiLineComment cs)
skipMultiLineComment [c:cs] = skipMultiLineComment cs
skipMultiLineComment [] = []
src/libraries/OS-Independent/Clean/Parse/ModuleName.dcl
0 → 100644
View file @
d17e6741
definition
module
Clean
.
Parse
.
ModuleName
from
Data
.
Error
import
::
MaybeError
from
Data
.
Maybe
import
::
Maybe
from
System
.
File
import
::
FileError
from
System
.
FilePath
import
::
FilePath
/**
* Guess the module name of a Clean file.
*
* @param The path to the Clean file
* @result
* `Error`, if the file could not be read;
* `Ok Nothing`, if the module name could not be guessed;
* `Ok (Just name)` in case of success.
*/
guessModuleName
::
!
FilePath
!*
World
->
*(!
MaybeError
FileError
(
Maybe
String
),
!*
World
)
src/libraries/OS-Independent/Clean/Parse/ModuleName.icl
0 → 100644
View file @
d17e6741
implementation
module
Clean
.
Parse
.
ModuleName
import
StdBool
import
StdChar
import
StdClass
import
StdFile
import
StdList
import
Data
.
Error
import
Data
.
Maybe
import
System
.
File
import
System
.
FilePath
guessModuleName
::
!
FilePath
!*
World
->
*(!
MaybeError
FileError
(
Maybe
String
),
!*
World
)
guessModuleName
filename
w
#
(
s
,
w
)
=
readFile
filename
w
|
isError
s
=
(
Error
(
fromError
s
),
w
)
#
modname
=
getModuleName
(
fromString
(
fromOk
s
))
=
(
Ok
modname
,
w
)
// A reasonably accurate simple scanner to get the module name from the file
getModuleName
::
![
Char
]
->
Maybe
String
getModuleName
['
definition
':
c
:
cs
]
|
isSpace
c
=
justModule
cs
getModuleName
['
implementation
':
c
:
cs
]
|
isSpace
c
=
justModule
cs
getModuleName
['
system
':
c
:
cs
]
|
isSpace
c
=
justModule
cs
getModuleName
[
c
:
cs
]
|
isSpace
c
=
getModuleName
cs
getModuleName
['
//':cs] = getModuleName (dropWhile ((<>) '\n') cs)
getModuleName
['
/*':cs] = getModuleName (skipMultiLineComment cs)
getModuleName cs = justModule cs
justModule :: ![Char] -> Maybe String
justModule ['module':c:cs] | isSpace c = justModuleName cs
justModule [c:cs] | isSpace c = justModule cs
justModule ['//':cs] = justModule (dropWhile ((<>) '\n') cs)
justModule ['/*':cs] = justModule (skipMultiLineComment cs)
justModule _ = Nothing
justModuleName :: ![Char] -> Maybe String
justModuleName cs
# (_,cs) = span isSpace cs
# (name,_) = span (\c -> c <> '/' && c <> ';' && not (isSpace c)) cs
= case name of
[] -> Nothing
_ -> Just (toString name)
skipMultiLineComment :: ![Char] -> [Char]
skipMultiLineComment ['*/':cs] = cs
skipMultiLineComment ['/*':cs] = skipMultiLineComment (skipMultiLineComment cs)
skipMultiLineComment [c:cs] = skipMultiLineComment cs
skipMultiLineComment [] = []
tests/linux64/test.icl
View file @
d17e6741
...
...
@@ -20,6 +20,7 @@ import qualified StdLibMisc
import
qualified
Clean
.
Doc
//import qualified Clean.Parse // requires Clean compiler
//import qualified Clean.Parse.Comments // requires Clean compiler
import
qualified
Clean
.
Parse
.
ModuleName
import
qualified
Clean
.
Types
//import qualified Clean.Types.CoclTransform // requires Clean compiler
import
qualified
Clean
.
Types
.
Parse
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment