diff options
-rw-r--r-- | src/ChangeLog | 5 | ||||
-rw-r--r-- | src/interp/i-eval.boot | 10 |
2 files changed, 12 insertions, 3 deletions
diff --git a/src/ChangeLog b/src/ChangeLog index e61fe00f..2dca6f61 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2011-11-17 Gabriel Dos Reis <gdr@cs.tamu.edu> + + * interp/i-eval.boot (evaluateType): Handle % and and signatures. + (evaluateFormAsType): Handle builtin constructor instantiations. + 2011-11-16 Gabriel Dos Reis <gdr@cs.tamu.edu> * interp/category.boot (mkCategory): Tidy. diff --git a/src/interp/i-eval.boot b/src/interp/i-eval.boot index 5572f087..fc92a6db 100644 --- a/src/interp/i-eval.boot +++ b/src/interp/i-eval.boot @@ -119,11 +119,12 @@ evaluateType form == -- on non-type valued arguemnts to the constructor -- and finally checking to see whether the type satisfies the -- conditions of its modemap - domain:= isDomainValuedVariable form => domain + form is "$" => form + form is "%" => "$" --FIXME we should switch to "%" wholesale form = $EmptyMode => form - form = "?" => $EmptyMode + form is "?" => $EmptyMode string? form => form - form = "$" => form + domain := isDomainValuedVariable form => domain $expandSegments : local := nil form is ['typeOf,.] => objVal getValue elaborateForm form @@ -149,6 +150,7 @@ evaluateType form == for [arg,:args] in tails argl repeat symbolMember?(arg,args) => throwKeyedMsg("S2IL0032",[arg]) form + op is ":" and argl is [x,t] => [op,x,evaluateType t] evaluateFormAsType form ident? form and niladicConstructor? form => evaluateType [form] ident? form and (constructor? form or builtinConstructor? form) => @@ -161,6 +163,8 @@ evaluateType form == ++ canonical form of the type. evaluateFormAsType form == form is [op,:args] and constructor? op => evaluateType1 form + form is [op,:args] and ident? op and builtinConstructor? op => + [op,:[evaluateFormAsType x for x in args]] t := mkAtree form -- ??? Maybe we should be more careful about generalized types. bottomUp t is [m] and (member(m,$LangSupportTypes) or isCategoryForm(m,$e)) => |