aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/ChangeLog4
-rw-r--r--src/interp/buildom.boot25
-rw-r--r--src/interp/i-funsel.boot3
-rw-r--r--src/testsuite/interpreter/builtin.input12
4 files changed, 35 insertions, 9 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index 20f386c8..8c9a8334 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,5 +1,9 @@
2009-10-15 Gabriel Dos Reis <gdr@cse.tamu.edu>
+ * interp/buildom.boot: Tidy.
+
+2009-10-15 Gabriel Dos Reis <gdr@cs.tamu.edu>
+
* interp/i-syscmd.boot (reportOpsFromUnitDirectly): Tidy.
2009-10-14 Gabriel Dos Reis <gdr@cs.tamu.edu>
diff --git a/src/interp/buildom.boot b/src/interp/buildom.boot
index 65beaa4c..0aff103a 100644
--- a/src/interp/buildom.boot
+++ b/src/interp/buildom.boot
@@ -89,8 +89,9 @@ Record(:args) ==
dom.1 :=
["lookupInTable",dom,
[["=",[[$Boolean,"$","$"],:oldSlotCode nargs]],
- ["~=",[[$Boolean,"$","$"],:0]],
- ["coerce",[[$OutputForm,"$"],:oldSlotCode(nargs + 1)]]]]
+ ["~=",[[$Boolean,"$","$"],:0]],
+ ["hash",[[$SingleInteger,"$"],:0]],
+ ["coerce",[[$OutputForm,"$"],:oldSlotCode(nargs + 1)]]]]
dom.2 := NIL
dom.3 := ["RecordCategory",:QCDR dom.0]
dom.4 := [$commonCategoryDefaults, $commonCategoryAncestors]
@@ -164,7 +165,8 @@ Union(:args) ==
["lookupInTable",dom,
[["=",[[$Boolean,"$","$"],:oldSlotCode nargs]],
["~=",[[$Boolean,"$","$"],:0]],
- ["coerce",[[$OutputForm,"$"],:oldSlotCode (nargs+1)]]]]
+ ["hash", [[$SingleInteger,"$"],:0]],
+ ["coerce",[[$OutputForm,"$"],:oldSlotCode (nargs+1)]]]]
dom.2 := NIL
dom.3 := ["UnionCategory",:QCDR dom.0]
dom.4 := [$commonCategoryDefaults, $commonCategoryAncestors]
@@ -219,7 +221,8 @@ Mapping(:args) ==
["lookupInTable",dom,
[["=",[[$Boolean,"$","$"],:oldSlotCode nargs]],
["~=",[[$Boolean,"$","$"],:0]],
- ["coerce",[[$OutputForm,"$"],:oldSlotCode(nargs + 1)]]]]
+ ["hash", [[$SingleInteger,"$"],:0]],
+ ["coerce",[[$OutputForm,"$"],:oldSlotCode(nargs + 1)]]]]
dom.2 := NIL
dom.3 := '(SetCategory)
dom.4 := [$commonCategoryDefaults, $commonCategoryAncestors]
@@ -254,9 +257,10 @@ Enumeration(:"args") ==
["lookupInTable",dom,
[["=",[[$Boolean,"$","$"],:oldSlotCode nargs]],
["~=",[[$Boolean,"$","$"],:0]],
- ["coerce",[[$OutputForm,"$"],:oldSlotCode(nargs+1)],
- [["$", $Symbol], :oldSlotCode(nargs+2)]]
- ]]
+ ["hash", [[$SingleInteger,"$"],:0]],
+ ["coerce",[[$OutputForm,"$"],:oldSlotCode(nargs+1)],
+ [["$", $Symbol], :oldSlotCode(nargs+2)]]
+ ]]
dom.2 := NIL
dom.3 := ["EnumerationCategory",:QCDR dom.0]
dom.4 := [$commonCategoryDefaults, $commonCategoryAncestors]
@@ -308,7 +312,9 @@ mkMappingFunList(nam,mapForm,e) ==
sigFunAlist:=
[["=",[$Boolean,nam ,nam], ["ELT",dc,$FirstParamSlot + nargs]],
["~=",[$Boolean,nam,nam],["ELT",dc,0]],
- ["coerce",[$OutputForm,nam], ["ELT",dc,$FirstParamSlot + nargs + 1]]]
+ ["hash",[$SingleInteger,nam],["ELT",dc,0]],
+ ["coerce",[$OutputForm,nam],
+ ["ELT",dc,$FirstParamSlot + nargs + 1]]]
[substitute(nam,dc,substituteDollarIfRepHack sigFunAlist),e]
mkRecordFunList(nam,["Record",:Alist],e) ==
@@ -318,6 +324,7 @@ mkRecordFunList(nam,["Record",:Alist],e) ==
[["construct",[nam,:[A for [.,a,A] in Alist]],"mkRecord"],
["=",[$Boolean,nam ,nam],["ELT",dc,$FirstParamSlot + len]],
["~=",[$Boolean,nam,nam],["ELT",dc,0]],
+ ["hash",[$SingleInteger,nam],["ELT",dc,0]],
["coerce",[$OutputForm,nam],["ELT",dc,$FirstParamSlot+len+1]],:
[["elt",[A,nam,PNAME a],["XLAM",["$1","$2"],["RECORDELT","$1",i,len]]]
for i in 0.. for [.,a,A] in Alist],:
@@ -336,6 +343,7 @@ mkNewUnionFunList(name,form is ["Union",:listOfEntries],e) ==
cList:=
[["=",[$Boolean,name ,name],["ELT",dc,$FirstParamSlot+nargs]],
["~=",[$Boolean,name,name],["ELT",dc,0]],
+ ["hash",[$SingleInteger,name],["ELT",dc,0]],
["coerce",[$OutputForm,name],["ELT",dc,$FirstParamSlot+nargs+1]],:
("append"/
[[["construct",[name,type],["XLAM",["#1"],["CONS",i,"#1"]]],
@@ -373,6 +381,7 @@ mkUnionFunList(op,form is ["Union",:listOfEntries],e) ==
cList:=
[["=",[$Boolean,g ,g],["ELT",op,$FirstParamSlot + nargs]],
["~=",[$Boolean,g,g],["ELT",op,0]],
+ ["hash",[$SingleInteger,g],["ELT",op,0]],
["coerce",[$OutputForm,g],["ELT",op,$FirstParamSlot+nargs+1]],:
("append"/
[[["autoCoerce",[g,t],upFun],
diff --git a/src/interp/i-funsel.boot b/src/interp/i-funsel.boot
index 069c37a8..68c93033 100644
--- a/src/interp/i-funsel.boot
+++ b/src/interp/i-funsel.boot
@@ -890,7 +890,8 @@ findFunctionInCategory(op,dc,tar,args1,args2,$Coerce,$SubDom) ==
if CONSP(xargs) then maxargs := MAX(maxargs,#xargs)
else maxargs := MAX(maxargs,1)
impls := cons([b,nil,true,d],impls)
- impls := cons([b,d,true,d],impls)
+ d isnt [k,"$",n] => systemErrorHere ["findFunctionInCategory",d]
+ impls := [[b,n,true,k],:impls]
impls := nreverse impls
if maxargs ~= -1 then
SL:= NIL
diff --git a/src/testsuite/interpreter/builtin.input b/src/testsuite/interpreter/builtin.input
new file mode 100644
index 00000000..7ceb0cd0
--- /dev/null
+++ b/src/testsuite/interpreter/builtin.input
@@ -0,0 +1,12 @@
+-- test operations from builtin domains.
+
+T := Record(f: Integer)
+
+t0 := [9]@T
+
+t1 := [1]@T
+
+hash t0
+t0 ~= t1
+
+