diff options
author | dos-reis <gdr@axiomatics.org> | 2008-01-15 08:50:07 +0000 |
---|---|---|
committer | dos-reis <gdr@axiomatics.org> | 2008-01-15 08:50:07 +0000 |
commit | b4e36d2669e4d86d5e183d279e07079a7d6e26bd (patch) | |
tree | 939097e6ca6364393f3cd65f297c5bbd8e4ef4ee /src/algebra | |
parent | c4283c6a980fa9faacc66090e90d6243ae6c03db (diff) | |
download | open-axiom-b4e36d2669e4d86d5e183d279e07079a7d6e26bd.tar.gz |
* algebra/syntax.spad (autoCoerce$Syntax): Add overloads.
* interp/compiler.boot (coerceExtraHard): Always coerce by
autoCoerce.
* testsuite/interpreter/case.spad: Likewise.
* testsuite/interpreter/case.input: New.
Diffstat (limited to 'src/algebra')
-rw-r--r-- | src/algebra/syntax.spad | 38 |
1 files changed, 33 insertions, 5 deletions
diff --git a/src/algebra/syntax.spad b/src/algebra/syntax.spad index b6331f4f..d07bad13 100644 --- a/src/algebra/syntax.spad +++ b/src/algebra/syntax.spad @@ -56,25 +56,41 @@ Syntax(): Public == Private where ++ coerce(i) injects the integer value `i' into the Syntax domain coerce: % -> Integer - ++ coerce(i) extracts the integer value `i' from the Syntax domain + ++ coerce(s) extracts and integer value from the syntax `s' + autoCoerce: % -> Integer + ++ autoCoerce(s) forcibly extracts an integer value from + ++ the syntax `s'; no check performed. To be called only + ++ at the discretion of the compiler. coerce: DoubleFloat -> % ++ coerce(f) injects the float value `f' into the Syntax domain coerce: % -> DoubleFloat - ++ coerce(f) extracts the float value `f' from the Syntax domain + ++ coerce(s) extracts a float value from the syntax `s'. + autoCoerce: % -> DoubleFloat + ++ autoCoerce(s) forcibly extracts a float value from the syntax `s'; + ++ no check performed. To be called only at the discretion of + ++ the compiler coerce: Symbol -> % ++ coerce(s) injects the symbol `s' into the Syntax domain. coerce: % -> Symbol - ++ coerce(s) extracts the symbol `s' from the Syntax domain. + ++ coerce(s) extracts a symbol from the syntax `s'. + autoCoerce: % -> Symbol + ++ autoCoerce(s) forcibly extracts a symbo from the Syntax + ++ domain `s'; no check performed. To be called only at + ++ at the discretion of the compiler. coerce: String -> % ++ coerce(s) injects the string value `s' into the syntax domain coerce: % -> String - ++ coerce(s) extract the string value `s' from the syntax domain + ++ coerce(s) extracts a string value from the syntax `s'. + autoCoerce: % -> String + ++ autoCoerce(s) forcibly extracts a string value from + ++ the syntax `s'; no check performed. To be called only at + ++ the discretion of the compiler. buildSyntax: (Symbol, List %) -> % ++ buildSyntax(op, [a1, ..., an]) builds a syntax object for op(a1,...,an). @@ -135,13 +151,19 @@ Syntax(): Public == Private where coerce(i: Integer): % == i pretend % - ccoerce(i: %): Integer == + autoCoerce(i: %): Integer == -- used for hard coercion + i : Integer + + coerce(i: %): Integer == i case Integer => i userError "invalid conversion target type" coerce(f: DoubleFloat): % == f pretend % + autoCoerce(f: %): DoubleFloat == -- used for hard coercion + f : DoubleFloat + coerce(f: %): DoubleFloat == f case DoubleFloat => f userError "invalid conversion target type" @@ -149,6 +171,9 @@ Syntax(): Public == Private where coerce(s: Symbol): % == s pretend % + autoCoerce(s: %): Symbol == -- used for hard coercion + s : Symbol + coerce(s: %): Symbol == s case Symbol => s userError "invalid conversion target type" @@ -156,6 +181,9 @@ Syntax(): Public == Private where coerce(s: String): % == s pretend % + autoCoerce(s: %): String == -- used for hard coercion + s : String + coerce(s: %): String == s case String => s userError "invalid conversion target type" |