]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/deriving/DerivingUtils.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / internal / deriving / DerivingUtils.java
1 package org.simantics.scl.compiler.internal.deriving;\r
2 \r
3 import org.simantics.scl.compiler.internal.parsing.types.TApplyAst;\r
4 import org.simantics.scl.compiler.internal.parsing.types.TTupleAst;\r
5 import org.simantics.scl.compiler.internal.parsing.types.TVarAst;\r
6 import org.simantics.scl.compiler.internal.parsing.types.TypeAst;\r
7 \r
8 class DerivingUtils {\r
9     \r
10     static TVarAst getHeadType(TypeAst typeAst) {\r
11         while(true) {\r
12             if(typeAst instanceof TApplyAst)\r
13                 typeAst = ((TApplyAst)typeAst).function;\r
14             else if(typeAst instanceof TVarAst)\r
15                 return (TVarAst)typeAst;\r
16             else if(typeAst instanceof TTupleAst) {\r
17                 TTupleAst tuple = (TTupleAst)typeAst;\r
18                 if(tuple.components.length == 1)\r
19                     typeAst = tuple.components[0];\r
20                 else\r
21                     return null;\r
22             }\r
23             else\r
24                 return null;\r
25         }\r
26     }\r
27     \r
28 }\r