@@ -30,6 +30,7 @@ export function convertLLVMTypeToValueType(type: llvm.Type) {
3030
3131export interface Value {
3232 getValue ( ) : llvm . Value ;
33+ getType ( ) : ValueTypeEnum ;
3334
3435 toBoolean ( ctx : Context , builder : llvm . IRBuilder , node : ts . Node ) : Value ;
3536 isString ( ) : boolean ;
@@ -46,6 +47,10 @@ export class FunctionReference implements Value {
4647 return this . llvmValue ;
4748 }
4849
50+ getType ( ) : ValueTypeEnum {
51+ throw new Error ( 'It is not a Primitive, it is FunctionReference (=ↀωↀ=)' ) ;
52+ }
53+
4954 public toBoolean ( ctx : Context , builder : llvm . IRBuilder , node : ts . Node ) : Value {
5055 throw new UnsupportedError ( node , 'Cannot cast ClassReference to boolean' ) ;
5156 }
@@ -68,6 +73,10 @@ export class ArrayReference implements Value {
6873 return this . llvmValue ;
6974 }
7075
76+ getType ( ) : ValueTypeEnum {
77+ throw new Error ( 'It is not a Primitive, it is ArrayReference (=ↀωↀ=)' ) ;
78+ }
79+
7180 public toBoolean ( ctx : Context , builder : llvm . IRBuilder , node : ts . Node ) : Value {
7281 throw new UnsupportedError ( node , 'Cannot cast ClassReference to boolean' ) ;
7382 }
@@ -90,6 +99,10 @@ export class ObjectReference implements Value {
9099 return this . llvmValue ;
91100 }
92101
102+ getType ( ) : ValueTypeEnum {
103+ throw new Error ( 'It is not a Primitive, it is ObjectReference (=ↀωↀ=)' ) ;
104+ }
105+
93106 public toBoolean ( ctx : Context , builder : llvm . IRBuilder , node : ts . Node ) : Value {
94107 throw new UnsupportedError ( node , 'Cannot cast ClassReference to boolean' ) ;
95108 }
@@ -106,6 +119,10 @@ export class ClassReference implements Value {
106119 throw new Error ( 'It is not a real value, it is ClassReference (=ↀωↀ=)' ) ;
107120 }
108121
122+ getType ( ) : ValueTypeEnum {
123+ throw new Error ( 'It is not a Primitive, it is ClassReference (=ↀωↀ=)' ) ;
124+ }
125+
109126 constructor ( structType : llvm . StructType ) {
110127 this . structType = structType ;
111128 }
@@ -127,6 +144,10 @@ export class Primitive implements Value {
127144 return this . llvmValue ;
128145 }
129146
147+ getType ( ) : ValueTypeEnum {
148+ return this . type ;
149+ }
150+
130151 constructor ( llvmValue : llvm . Value , type ?: ValueTypeEnum ) {
131152 this . llvmValue = llvmValue ;
132153 this . type = type || convertLLVMTypeToValueType ( llvmValue . type ) ;
0 commit comments