Mercurial > hg > truffle
diff graal/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/SLTypes.java @ 13821:b16ec83edc73
Documentation and more refactoring of Simple Language
author | Christian Wimmer <christian.wimmer@oracle.com> |
---|---|
date | Wed, 29 Jan 2014 20:45:43 -0800 |
parents | 7c418666c6c9 |
children | afd6fa5e8229 |
line wrap: on
line diff
--- a/graal/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/SLTypes.java Wed Jan 29 20:43:28 2014 -0800 +++ b/graal/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/SLTypes.java Wed Jan 29 20:45:43 2014 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,22 +25,47 @@ import java.math.*; import com.oracle.truffle.api.dsl.*; +import com.oracle.truffle.sl.*; import com.oracle.truffle.sl.runtime.*; -@TypeSystem({long.class, BigInteger.class, boolean.class, String.class, SLFunction.class, SLNull.class, Object[].class}) -public class SLTypes { +/** + * The type system of SL, as explained in {@link SLMain}. Based on the annotation {@link TypeSystem} + * , the Truffle DSL generates the subclass {@link SLTypesGen} with type test and type conversion + * methods for all types. In this class, we only cover types where the automatically generated ones + * would not be sufficient. + */ +@TypeSystem({long.class, BigInteger.class, boolean.class, String.class, SLFunction.class, SLNull.class}) +public abstract class SLTypes { + /** + * Example of a manually specified type check that replaces the automatically generated type + * check that the Truffle DSL would generate. For {@link SLNull}, we do not need an + * {@code instanceof} check, because we know that there is only a {@link SLNull#SINGLETON + * singleton} instance. + */ @TypeCheck public boolean isSLNull(Object value) { - return SLNull.INSTANCE == value; + return value == SLNull.SINGLETON; } + /** + * Example of a manually specified type cast that replaces the automatically generated type cast + * that the Truffle DSL would generate. For {@link SLNull}, we do not need an actual cast, + * because we know that there is only a {@link SLNull#SINGLETON singleton} instance. + */ @TypeCast public SLNull asSLNull(Object value) { assert isSLNull(value); - return SLNull.INSTANCE; + return SLNull.SINGLETON; } + /** + * Informs the Truffle DSL that a primitive {@code long} value can used in all specializations + * where a {@link BigInteger} is expected. This models the semantic of SL: It only has an + * arbitrary precision Number type (implemented as {@link BigInteger}, and {@code long} is only + * used as a performance optimization to avoid the costly {@link BigInteger} arithmetic for + * values that fit into a 64-bit primitive value. + */ @ImplicitCast public BigInteger castBigInteger(long value) { return BigInteger.valueOf(value);