Changeset 2977


Ignore:
Timestamp:
Mar 27, 2013, 2:38:40 PM (4 years ago)
Author:
ksherdy
Message:

Minor restructuring for type signatures and checking support.

Location:
proto/pabloj/trunk/src/compilers
Files:
3 added
2 deleted
4 edited
4 copied

Legend:

Unmodified
Added
Removed
  • proto/pabloj/trunk/src/compilers/pabloB/ast/Generators.java

    r2966 r2977  
    218218        }
    219219
    220         public static FuncCallNode makeFuncCallNode(CompoundIdentifierNode compoundIdentifierNode, Token locationToken, ASTNode[] args) {
     220        public static FuncCallNode makeFuncCallNode(CompoundIdentifierNode compoundIdentifierNode, Token locationToken, ASTNode ...args) {
    221221
    222222                FuncCallNode node = Generators.makeFuncCallNode(compoundIdentifierNode, locationToken);
     
    229229        }
    230230       
    231         public static FuncCallNode makeFuncCallNode(String[] identifiers, Token locationToken, ASTNode[] args) {
     231        public static FuncCallNode makeFuncCallNode(String[] identifiers, Token locationToken, ASTNode ...args) {
    232232       
    233233                FuncCallNode node = Generators.makeFuncCallNode(identifiers, locationToken);
  • proto/pabloj/trunk/src/compilers/pabloS/ast/Generators.java

    r2972 r2977  
    6161        }
    6262
    63         public static FuncCallNode makeFuncCallNode(String identifier, Token locationToken, ASTNode[] args) {
     63        public static FuncCallNode makeFuncCallNode(String identifier, Token locationToken, ASTNode ...args) {
    6464               
    6565                FuncCallNode node = Generators.makeFuncCallNode(identifier, locationToken);
     
    8484        }
    8585
    86         public static FuncCallNode makeFuncCallNode(String[] identifiers, Token locationToken, ASTNode[] args) {
     86        public static FuncCallNode makeFuncCallNode(String[] identifiers, Token locationToken, ASTNode ...args) {
    8787       
    8888                FuncCallNode node = Generators.makeFuncCallNode(identifiers, locationToken);
  • proto/pabloj/trunk/src/compilers/pabloS/lang/PabloSBuiltins.java

    r2972 r2977  
    66public enum PabloSBuiltins {
    77
    8     ADVANCE(Type.One, "Advance", 1),
    9     SCANTOFIRST(Type.One, "ScanToFirst", 1),
    10     SCANTHRU(Type.One, "ScanThru", 2),
    11     SCANTO(Type.One, "ScanTo", 2),
    12     ADVANCETHENSCANTHRU(Type.One, "AdvanceThenScanThru", 2),
    13     ADVANCETHENSCANTO(Type.One, "AdvanceThenScanTo", 2),
    14     SPANUPTO(Type.One, "SpanUpTo", 2),
    15     INCLUSIVESPAN(Type.One, "InclusiveSpan", 2),
    16     EXCLUSIVESPAN(Type.One, "ExclusiveSpan", 2),   
     8    ADVANCE("Advance", CarryType.One, 1),
     9    SCANTOFIRST("ScanToFirst", CarryType.One, 1),
     10    SCANTHRU("ScanThru", CarryType.One, 2),
     11    SCANTO("ScanTo", CarryType.One, 2),
     12    ADVANCETHENSCANTHRU("AdvanceThenScanThru", CarryType.One, 2),
     13    ADVANCETHENSCANTO("AdvanceThenScanTo", CarryType.One, 2),
     14    SPANUPTO("SpanUpTo", CarryType.One, 2),
     15    INCLUSIVESPAN("InclusiveSpan", CarryType.One, 2),
     16    EXCLUSIVESPAN("ExclusiveSpan", CarryType.One, 2),   
    1717
    18     ADVANCE32(Type.N, "Advance32", 1),
    19     ADVANCEN(Type.N, "Advance", 2),
     18    ADVANCE32("Advance32", CarryType.N, 1),
     19    ADVANCEN("Advance", CarryType.N, 2),
    2020
    21     MASK(Type.None, "Mask", 2),   
    22     ATEOF(Type.None, "atEOF", 1),
    23     INFILE(Type.None, "inFile", 1),
    24     ASSERTZERO(Type.None, "assert_0", 2),       
    25     EOFMASK(Type.None, "EOF_mask", 0), // deprecated
     21    MASK("Mask", CarryType.None, 2),   
     22    ATEOF("atEOF", CarryType.None, 1),
     23    INFILE("inFile", CarryType.None, 1),
     24    ASSERTZERO("assert_0", CarryType.None, 2), 
     25    EOFMASK("EOF_mask", CarryType.None, 0), // deprecated
    2626       
    27     PRINTBITBLOCK(Type.None, "PrintBitBlock", 1),
    28     ASSERTBITBLOCKALIGN(Type.None, "AssertBitBlockAlign", 1);
     27    PRINTBITBLOCK("PrintBitBlock", CarryType.None, 1),
     28    ASSERTBITBLOCKALIGN("AssertBitBlockAlign", CarryType.None, 1);
    2929   
    30     private enum Type{One, N, None};   
     30    private enum CarryType{One, N, None};   
    3131   
    32     private final Type type;
    33         private final String pabloSName;
     32    private final CarryType type;
     33        private final String name;
    3434        private final int argCount;
    3535       
    36         private PabloSBuiltins(Type type, String pabloSName, int argCount) {
     36        private PabloSBuiltins(String name, CarryType type, int argCount) {
    3737                this.type = type;
    38                 this.pabloSName = pabloSName;
     38                this.name = name;
    3939                this.argCount = argCount;
    4040        }
    4141       
    42         public String pabloSName() { return this.pabloSName; }
     42        public String pabloSName() { return this.name; }
    4343        public int argCount() { return this.argCount; }
    4444
     
    4848               
    4949                for (PabloSBuiltins operation : PabloSBuiltins.values()) {
    50                         if (Type.One == operation.type) {
     50                        if (CarryType.One == operation.type) {
    5151                                carryOne.add(operation);
    5252                        }
     
    6161               
    6262                for (PabloSBuiltins operation : PabloSBuiltins.values()) {
    63                         if (Type.N == operation.type) {
     63                        if (CarryType.N == operation.type) {
    6464                                carryN.add(operation);
    6565                        }
  • proto/pabloj/trunk/src/compilers/pabloS/lang/PabloSBuiltinsSignatures.java

    r2956 r2977  
    1 package compilers.pabloS.semanticAnalyzer.signatures;
     1package compilers.pabloS.lang;
    22
    3 public class FunctionSignatures {
     3public class PabloSBuiltinsSignatures {
    44        // TODO
    55}
  • proto/pabloj/trunk/src/compilers/pabloS/lang/types/PrimitiveType.java

    r2956 r2977  
    1 package compilers.pabloS.semanticAnalyzer.types;
     1package compilers.pabloS.lang.types;
    22
    3 public class PrimitiveTypes implements Type{
    4         // TODO
     3public enum PrimitiveType implements Type {
     4
     5        INTEGERCONSTANT(true),
     6        STRINGCONSTANT(true),
     7        STREAM1(true),
     8        STREAM2(true),
     9        STREAM4(true),
     10        STREAM8(true),
     11        STREAM16(true),
     12        STREAM32(true),
     13        STREAM64(true),
     14        STREAM128(true),
     15        STREAM256(true),
     16        NO_MATCH(false),                                                                // use as a (unified) value for non-matching types.
     17        NO_TYPE (false),                                                                // use as a value when no type has been assigned.
     18        ERROR(false) {
     19                public Type unify(Type otherType) {                     // use as a value when a syntax error has occurred
     20                        return ALL_TYPES_ACCEPT_ERROR_TYPES ? otherType : NO_MATCH;
     21                }
     22        },
     23        ANY(false) {                    // use as a value when this could represent any type
     24                public Type unify(Type otherType) {
     25                        return otherType;
     26                }
     27        };
     28        private static final boolean ALL_TYPES_ACCEPT_ERROR_TYPES = true;
     29        private boolean isComparable;
     30        private String infoString;
     31       
     32        private PrimitiveType(boolean isComparable) {
     33                this.isComparable = isComparable;
     34                this.infoString = toString();
     35        }
     36        private PrimitiveType(boolean isComparable, String infoString) {
     37                this.isComparable = isComparable;
     38                this.infoString = infoString;
     39        }
     40        public Type unify(Type otherType) {
     41                if(otherType instanceof TypeVariable) {         // variables take priority
     42                        return otherType.unify(this);
     43                }
     44               
     45                if(this == otherType /*|| otherType == ANY*/ || isAcceptableError(otherType)) {
     46                        return this;
     47                }
     48                return NO_MATCH;
     49        }
     50        private boolean isAcceptableError(Type otherType) {
     51                return otherType == ERROR && ALL_TYPES_ACCEPT_ERROR_TYPES;
     52        }
     53
     54        @Override
     55        public boolean isComparable() {
     56                return isComparable;
     57        }       
     58       
     59        @Override
     60        public String infoString() {
     61                return infoString;
     62        }
     63       
     64        @Override
     65        public Type getConcreteType() {
     66                return this;
     67        }
     68       
     69
    570}
     71
  • proto/pabloj/trunk/src/compilers/pabloS/lang/types/StreamStructure.java

    r2956 r2977  
    1 package compilers.pabloS.semanticAnalyzer.types;
     1package compilers.pabloS.lang.types;
    22
    3 public class StreamStructure implements Type {
     3
     4public class StreamStructure { // implements Type {
    45        // TODO
    56}
  • proto/pabloj/trunk/src/compilers/pabloS/lang/types/Type.java

    r2956 r2977  
    1 package compilers.pabloS.semanticAnalyzer.types;
     1package compilers.pabloS.lang.types;
    22
    33public interface Type {
    4         // TODO
     4       
     5        /** Yields a printable string for information about this type.
     6         * use this rather than toString() if you want an abbreviated string.
     7         * In particular, this yields an empty string for PrimitiveType.NO_TYPE.
     8         *
     9         * @return string representation of type.
     10         */
     11        public String infoString();
     12               
     13       
     14        /** Determines if this type is comparable.
     15         */
     16        public boolean isComparable();
     17               
     18        /** Yields a type that is the unification of this type
     19         * with otherType. Returns PrimitiveType.NO_MATCH if there is no
     20         * unified type. Constrains variables.
     21         */
     22        public Type unify(Type otherType);
     23       
     24        /** Returns the type with any type variables filled in with their values.
     25         */
     26        public Type getConcreteType();
    527}
     28
  • proto/pabloj/trunk/src/compilers/pabloS/semanticAnalyzer/visitors/CarryIntroXFormer.java

    r2972 r2977  
    193193                                                                                carrySet2Lang.getCode(CarrySetBuiltins.CARRYADJUST)},
    194194                                                                                node.getToken(),
    195                                                                                 new ASTNode [] {carry1CountNode});
     195                                                                                carry1CountNode);
    196196                               
    197197                                BlockStmtNode blockStmtNode = Accessors.blockStmtNode(node);
     
    250250                                                                carrySet2Lang.getCode(CarrySetBuiltins.CARRYAT)},
    251251                                                node.getToken(),
    252                                                 new ASTNode [] {currentCarry});
     252                                                currentCarry);
    253253                               
    254254                                pending64CallOrConstant = Generators.makeFuncCallNode(
     
    256256                                                                carrySet2Lang.getCode(CarrySetBuiltins.PENDING64)},
    257257                                                node.getToken(),
    258                                                 new ASTNode [] {currentAdvN});
     258                                                currentAdvN);
    259259                        } else {
    260260                                carryAtCallOrConstant = Generators.makeFuncCallNode(IDISASIMDBuiltins.CONSTANT.ConstantName("1", "0"), node.getToken());
     
    665665                                                                new String [] {getCarrySetIdentifier(), carrySet2Lang.getCode(CarrySetBuiltins.CARRYDEQUEUEENQUEUE)},
    666666                                                                node.getToken(),
    667                                                                 new ASTNode [] {carryBaseNode, carryCountNode});
     667                                                                carryBaseNode, carryCountNode);
    668668                       
    669669                        if (Accessors.hasElseBlockStmt(node)) {
     
    745745                                                                        carrySet2Lang.getCode(CarrySetBuiltins.CARRYDECLARE),
    746746                                                                        node.getToken(),
    747                                                                         new ASTNode [] {localCarrySetIdentifierNode, carry1CountNode, carryNCountNode});
     747                                                                        localCarrySetIdentifierNode, carry1CountNode, carryNCountNode);
    748748                                               
    749749                        Accessors.whileBlockStmt(innerWhile).insertChild(carryDeclareFuncCall);
     
    752752                                        new String [] {carrySetIdentifier, carrySet2Lang.getCode(CarrySetBuiltins.CARRYCOMBINE)},
    753753                                        node.getToken(),
    754                                         new ASTNode [] {localCarrySetArrayIdentifierNode, carryBaseNode, carry1CountNode}); /////////////////
     754                                        localCarrySetArrayIdentifierNode, carryBaseNode, carry1CountNode);
    755755                       
    756756                        Accessors.whileBlockStmt(innerWhile).appendChild(carryCombine);
     
    780780                                        new String [] {carrySetIdentifier, carrySet2Lang.getCode(CarrySetBuiltins.CARRYDEQUEUEENQUEUE)},
    781781                                                                        node.getToken(),
    782                                                                         new ASTNode [] {carryBaseNode, carry1CountNode});
     782                                                                        carryBaseNode, carry1CountNode);
    783783                       
    784784                        // else body                   
     
    839839                                                                        carrySet2Lang.getCode(CarrySetBuiltins.CARRYRANGE)},
    840840                                                                        lhs.getToken(),
    841                                                                         new ASTNode [] {carryBaseNode, carryCountNode});
     841                                                                        carryBaseNode, carryCountNode);
    842842                       
    843843                        BinaryOperatorNode replacementIfTestNode = Generators.makeBinaryOperatorNode(lhs, rhs, binaryOperatorToken);
Note: See TracChangeset for help on using the changeset viewer.