repositories
/
cc1516.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
a8348a3
)
added argument mismatch
author
Mart Lubbers
<mart@martlubbers.net>
Thu, 14 Apr 2016 06:58:55 +0000
(08:58 +0200)
committer
Mart Lubbers
<mart@martlubbers.net>
Thu, 14 Apr 2016 06:58:55 +0000
(08:58 +0200)
sem.dcl
patch
|
blob
|
history
sem.icl
patch
|
blob
|
history
diff --git
a/sem.dcl
b/sem.dcl
index
e981361
..
584deb5
100644
(file)
--- a/
sem.dcl
+++ b/
sem.dcl
@@
-11,6
+11,7
@@
from StdOverloaded import class toString
| FieldSelectorError Pos Type FieldSelector
| OperatorError Pos Op2 Type
| UndeclaredVariableError Pos String
| FieldSelectorError Pos Type FieldSelector
| OperatorError Pos Op2 Type
| UndeclaredVariableError Pos String
+ | ArgumentMisMatchError Pos String
| Error String
:: Gamma
:: SemOutput :== Either [SemError] (AST, Gamma)
| Error String
:: Gamma
:: SemOutput :== Either [SemError] (AST, Gamma)
diff --git
a/sem.icl
b/sem.icl
index
e2227d1
..
06200b1
100644
(file)
--- a/
sem.icl
+++ b/
sem.icl
@@
-23,7
+23,6
@@
import GenEq
from Text import class Text(concat), instance Text String
import AST
from Text import class Text(concat), instance Text String
import AST
-from parse import :: ParserOutput, :: Error
:: Gamma :== ('Map'.Map String Type, [String])
:: Env a :== StateT Gamma (Either SemError) a
:: Gamma :== ('Map'.Map String Type, [String])
:: Env a :== StateT Gamma (Either SemError) a
@@
-88,12
+87,15
@@
genType [x:xs] = liftM2 (->>) (freshIdent >>= \fi->pure $ IdType fi)
(genType xs)
matchFunctions :: [String] Type -> Env Type
(genType xs)
matchFunctions :: [String] Type -> Env Type
-matchFunctions [] (_ ->> _) = liftT $ Left $ Error "Not enough arguments"
-matchFunctions _ (VoidType ->> _) = liftT $ Left $ Error "Cannot have a void type in the middle of the function definition"
+matchFunctions [] (_ ->> _) = liftT $ Left $
+ ArgumentMisMatchError zero "Not enough arguments"
+matchFunctions _ (VoidType ->> _) = liftT $ Left $
+ ArgumentMisMatchError zero "Void can't be a non return type"
matchFunctions [x:xs] (t1 ->> t2) =
modify (\(st, r)->('Map'.put x t1 st, r)) >>| matchFunctions xs t2
matchFunctions [] t = pure t
matchFunctions [x:xs] (t1 ->> t2) =
modify (\(st, r)->('Map'.put x t1 st, r)) >>| matchFunctions xs t2
matchFunctions [] t = pure t
-matchFunctions _ t = liftT $ Left $ Error "Too much argumnts"
+matchFunctions _ t = liftT $ Left $
+ ArgumentMisMatchError zero "Too much argumnts"
semVarDecl :: VarDecl -> Env VarDecl
semVarDecl (VarDecl pos type ident ex) = unify type ex
semVarDecl :: VarDecl -> Env VarDecl
semVarDecl (VarDecl pos type ident ex) = unify type ex
@@
-262,15
+264,12
@@
replace ident type = get >>= \(st, fr)->put ('Map'.fromList $
itupdate _ _ k = k
instance toString SemError where
itupdate _ _ k = k
instance toString SemError where
- toString (ParseError p e) = concat [
- toString p,"SemError: ParseError: ", e]
- toString (Error e) = "SemError: " +++ e
- toString (UnifyError p t1 t2) = concat [
- toString p,
+ toString (ParseError p e) = concat [toString p,
+ "SemError: ParseError: ", e]
+ toString (UnifyError p t1 t2) = concat [ toString p,
"SemError: Cannot unify types. Expected: ",
toString t1, ". Given: ", toString t2]
"SemError: Cannot unify types. Expected: ",
toString t1, ". Given: ", toString t2]
- toString (FieldSelectorError p t fs) = concat [
- toString p,
+ toString (FieldSelectorError p t fs) = concat [ toString p,
"SemError: Cannot select ", toString fs, " from type: ",
toString t]
toString (OperatorError p o t) = concat [
"SemError: Cannot select ", toString fs, " from type: ",
toString t]
toString (OperatorError p o t) = concat [
@@
-279,6
+278,9
@@
instance toString SemError where
toString t]
toString (UndeclaredVariableError p ident) = concat [
toString p, "SemError: identifier: ", ident, " undefined."]
toString t]
toString (UndeclaredVariableError p ident) = concat [
toString p, "SemError: identifier: ", ident, " undefined."]
+ toString (ArgumentMisMatchError p s) = concat [toString p,
+ "SemError: Argument mismatch: ", s]
+ toString (Error e) = "SemError: " +++ e
saveGamma :: Env Gamma
saveGamma = get
saveGamma :: Env Gamma
saveGamma = get