aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/ChangeLog9
-rw-r--r--src/interp/i-coerce.boot10
-rw-r--r--src/interp/sys-constants.boot4
3 files changed, 19 insertions, 4 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index 5e37f27f..4d1dc7b4 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,12 @@
+2008-10-17 Waldek Hebisch <hebisch@math.uni.wroc.pl>
+ Gabriel Dos Reis <gdr@cs.tamu.edu>
+
+ Fix AW/271
+ * interp/sys-constants.boot ($Field): New.
+ * interp/i-coerce.boot (retract2Specialization): Ignore
+ expressions whose types do no belong to Field.
+
+
2008-10-17 Martin Rubey <martin.rubey@univie.ac.at>
Fix AW/413, AW/414
diff --git a/src/interp/i-coerce.boot b/src/interp/i-coerce.boot
index 35a0e23b..4a145952 100644
--- a/src/interp/i-coerce.boot
+++ b/src/interp/i-coerce.boot
@@ -214,10 +214,12 @@ retract2Specialization object ==
type is ['Expression,D] =>
atom val' => nil -- certainly not a fraction
[num,:den] := val'
- -- coerceRetract already handles case where den = 1
- num isnt [0,:num] => NIL
- den isnt [0,:den] => NIL
- objNewWrap([num,:den],[$QuotientField, D])
+ ofCategory(type,$Field) =>
+ -- coerceRetract already handles case where den = 1
+ num isnt [0,:num] => NIL
+ den isnt [0,:den] => NIL
+ objNewWrap([num,:den],[$QuotientField, D])
+ nil
type is ['SimpleAlgebraicExtension,k,rep,.] =>
-- try to retract as an element of rep and see if we can get an
-- element of k
diff --git a/src/interp/sys-constants.boot b/src/interp/sys-constants.boot
index f6c9ef10..f4468e15 100644
--- a/src/interp/sys-constants.boot
+++ b/src/interp/sys-constants.boot
@@ -331,6 +331,10 @@ $SideEffectFreeFunctionList ==
--% Types
+++ The Field category form
+$Field ==
+ '(Field)
+
++ The Void domain constructor form
$Void ==
'(Void)