import org.simantics.scl.compiler.constants.SCLConstant;
import org.simantics.scl.compiler.constants.SCLConstructor;
import org.simantics.scl.compiler.constants.singletons.BindingConstant;
+import org.simantics.scl.compiler.constants.singletons.ClassConstant;
import org.simantics.scl.compiler.constants.singletons.FailFunction;
import org.simantics.scl.compiler.constants.singletons.JustConstant;
import org.simantics.scl.compiler.constants.singletons.NothingConstant;
import org.simantics.scl.compiler.constants.singletons.TypeOfConstant;
import org.simantics.scl.compiler.constants.singletons.TypeOfProxyConstant;
import org.simantics.scl.compiler.constants.singletons.TypeProxyConstant;
+import org.simantics.scl.compiler.constants.singletons.TypeValueConstant;
import org.simantics.scl.compiler.elaboration.fundeps.Fundep;
import org.simantics.scl.compiler.elaboration.modules.Documentation;
+import org.simantics.scl.compiler.elaboration.modules.PrivateProperty;
import org.simantics.scl.compiler.elaboration.modules.SCLValue;
import org.simantics.scl.compiler.elaboration.modules.TypeClass;
import org.simantics.scl.compiler.errors.Locations;
"64-bit floating point number"));
addTypeDescriptor("String", new StandardTypeConstructor(Types.STRING, Kinds.STAR, TypeDesc.STRING,
"Unicode string"));
-
- addTypeDescriptor("BooleanArray", new StandardTypeConstructor(Types.BOOLEAN_ARRAY, Kinds.STAR, TypeDesc.forClass(boolean[].class)));
- addTypeDescriptor("ByteArray", new StandardTypeConstructor(Types.BYTE_ARRAY, Kinds.STAR, TypeDesc.forClass(byte[].class)));
- addTypeDescriptor("CharacterArray", new StandardTypeConstructor(Types.CHARACTER_ARRAY, Kinds.STAR, TypeDesc.forClass(char[].class)));
- addTypeDescriptor("ShortArray", new StandardTypeConstructor(Types.SHORT_ARRAY, Kinds.STAR, TypeDesc.forClass(short[].class)));
- addTypeDescriptor("IntegerArray", new StandardTypeConstructor(Types.INTEGER_ARRAY, Kinds.STAR, TypeDesc.forClass(int[].class)));
- addTypeDescriptor("LongArray", new StandardTypeConstructor(Types.LONG_ARRAY, Kinds.STAR, TypeDesc.forClass(long[].class)));
- addTypeDescriptor("FloatArray", new StandardTypeConstructor(Types.FLOAT_ARRAY, Kinds.STAR, TypeDesc.forClass(float[].class)));
- addTypeDescriptor("DoubleArray", new StandardTypeConstructor(Types.DOUBLE_ARRAY, Kinds.STAR, TypeDesc.forClass(double[].class)));
-
+
addTypeDescriptor("Array", new StandardTypeConstructor(Types.con(Types.BUILTIN, "Array"), Kinds.STAR_TO_STAR, TypeDesc.forClass(Object[].class)));
addTypeDescriptor("Maybe", MaybeType.INSTANCE);
addEffectConstructor("Proc", new EffectConstructor(Types.PROC));
addEffectConstructor("Exception", new EffectConstructor(Types.EXCEPTION));
+ addTypeAlias("Pure", TVar.EMPTY_ARRAY, Types.NO_EFFECTS);
+
//addTypeDescriptor("->", new StandardTypeConstructor(Kinds.STAR_TO_STAR_TO_STAR, Constants.FUNCTION));
addTypeDescriptor("[]", new StandardTypeConstructor(Types.LIST, Kinds.STAR_TO_STAR, Constants.LIST));
addTypeDescriptor("@", new StandardTypeConstructor(Types.PUNIT, Kinds.STAR, Constants.TUPLE[0]));
// *** Lists ***
for(int arity=0;arity<=Constants.MAX_LIST_LITERAL_LENGTH;++arity) {
- LIST_CONSTRUCTORS[arity] = addValue("_list_literal_" + arity + "_",
+ SCLValue value = addValue("_list_literal_" + arity + "_",
arity == 0 ? new EmptyListConstructor() :
new ListConstructor(arity)
);
+ value.addProperty(PrivateProperty.INSTANCE);
+ LIST_CONSTRUCTORS[arity] = value;
}
// *** Boolean ***
addValue("freezeMVector", new FreezeMVector());
addValue("setMVector", SetMVector.INSTANCE);
+ StandardTypeConstructor ClassC = new StandardTypeConstructor(Types.CLASS, Kinds.STAR_TO_STAR,
+ TypeDesc.forClass("java/lang/Class"));
+ ClassC.setType(Types.CLASS, A);
+ addTypeDescriptor("Class", ClassC);
+ addValue("classObject", ClassConstant.INSTANCE);
+
// *** fail ***
addValue("fail", FailFunction.INSTANCE).documentation =
);
block.addStatement(apply);
- block.setExit(new Jump(runProcFunction.getReturnCont().createOccurrence(),
+ block.setExit(new Jump(-1, runProcFunction.getReturnCont().createOccurrence(),
x.createOccurrence()));
runProcFunction.addBlock(block);
// typeOf :: Typeable a => a -> Type
addValue("typeOf", TypeOfConstant.INSTANCE)
.documentation = "Returns the type of the value given as a parameter.";
+ addValue("typeValue", TypeValueConstant.INSTANCE);
addValue("typeOfProxy", TypeOfProxyConstant.INSTANCE)
.documentation = "Returns the type of the type proxy given as a parameter.";
addValue("TypeProxy", TypeProxyConstant.INSTANCE);