]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/types/ast/TConAst.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / internal / types / ast / TConAst.java
1 package org.simantics.scl.compiler.internal.types.ast;
2
3 import org.simantics.scl.compiler.internal.types.TypeElaborationContext;
4 import org.simantics.scl.compiler.types.Type;
5 import org.simantics.scl.compiler.types.Types;
6
7 public class TConAst extends TypeAst {
8
9     public final String name;
10     
11     public TConAst(String name) {
12         this.name = name;
13     }
14
15     @Override
16     public void toString(StringBuilder b) {
17         b.append(name);
18     }
19
20     @Override
21     public Type toType(TypeElaborationContext context) {
22         char c = name.charAt(0);
23         if(c == '(') {
24             for(int i=1;i<name.length()-1;++i)
25                 if(name.charAt(i) != ',') {
26                     return context.resolveTypeConstructor(name.substring(1, name.length()-1));
27                 }
28             return Types.con(Types.BUILTIN, name);
29         }
30         else {
31             int p = name.lastIndexOf('.');
32             if(p == -1)
33                 return context.resolveTypeConstructor(name);
34             else
35                 return context.resolveTypeConstructor(name.substring(0, p), name.substring(p+1));
36         }
37     }
38
39     @Override
40     public int getPrecedence() {
41         return 0;
42     }
43     
44 }