@@ -5,34 +5,34 @@ import prog8.ast.Node
55/* *************************** AST Data classes ****************************/
66
77enum class DataType {
8- UBYTE ,
9- BYTE ,
10- UWORD ,
11- WORD ,
12- FLOAT ,
13- STR ,
14- STR_S ,
15- ARRAY_UB ,
16- ARRAY_B ,
17- ARRAY_UW ,
18- ARRAY_W ,
19- ARRAY_F ,
20- STRUCT ;
8+ UBYTE , // pass by value
9+ BYTE , // pass by value
10+ UWORD , // pass by value
11+ WORD , // pass by value
12+ FLOAT , // pass by value
13+ STR , // pass by reference
14+ STR_S , // pass by reference
15+ ARRAY_UB , // pass by reference
16+ ARRAY_B , // pass by reference
17+ ARRAY_UW , // pass by reference
18+ ARRAY_W , // pass by reference
19+ ARRAY_F , // pass by reference
20+ STRUCT ; // pass by reference
2121
2222 /* *
2323 * is the type assignable to the given other type?
2424 */
2525 infix fun isAssignableTo (targetType : DataType ) =
2626 // what types are assignable to others without loss of precision?
2727 when (this ) {
28- UBYTE -> targetType == UBYTE || targetType == UWORD || targetType == WORD || targetType == FLOAT
29- BYTE -> targetType == BYTE || targetType == UBYTE || targetType == UWORD || targetType == WORD || targetType == FLOAT
30- UWORD -> targetType == UWORD || targetType == FLOAT
31- WORD -> targetType == WORD || targetType == UWORD || targetType == FLOAT
28+ UBYTE -> targetType in setOf ( UBYTE , UWORD , WORD , FLOAT )
29+ BYTE -> targetType in setOf ( BYTE , UBYTE , UWORD , WORD , FLOAT )
30+ UWORD -> targetType in setOf ( UWORD , FLOAT )
31+ WORD -> targetType in setOf ( WORD , UWORD , FLOAT )
3232 FLOAT -> targetType == FLOAT
3333 STR -> targetType == STR || targetType== STR_S
3434 STR_S -> targetType == STR || targetType== STR_S
35- in ArrayDatatypes -> targetType == = this
35+ in ArrayDatatypes -> targetType == this
3636 else -> false
3737 }
3838
@@ -97,17 +97,19 @@ enum class VarDeclType {
9797 MEMORY
9898}
9999
100- val IterableDatatypes = setOf (
101- DataType .STR , DataType .STR_S ,
102- DataType .ARRAY_UB , DataType .ARRAY_B ,
103- DataType .ARRAY_UW , DataType .ARRAY_W ,
104- DataType .ARRAY_F )
105100val ByteDatatypes = setOf (DataType .UBYTE , DataType .BYTE )
106101val WordDatatypes = setOf (DataType .UWORD , DataType .WORD )
107102val IntegerDatatypes = setOf (DataType .UBYTE , DataType .BYTE , DataType .UWORD , DataType .WORD )
108103val NumericDatatypes = setOf (DataType .UBYTE , DataType .BYTE , DataType .UWORD , DataType .WORD , DataType .FLOAT )
109104val StringDatatypes = setOf (DataType .STR , DataType .STR_S )
110105val ArrayDatatypes = setOf (DataType .ARRAY_UB , DataType .ARRAY_B , DataType .ARRAY_UW , DataType .ARRAY_W , DataType .ARRAY_F )
106+ val IterableDatatypes = setOf (
107+ DataType .STR , DataType .STR_S ,
108+ DataType .ARRAY_UB , DataType .ARRAY_B ,
109+ DataType .ARRAY_UW , DataType .ARRAY_W ,
110+ DataType .ARRAY_F )
111+ val PassByValueDatatypes = NumericDatatypes
112+ val PassByReferenceDatatypes = IterableDatatypes .plus(DataType .STRUCT )
111113val ArrayElementTypes = mapOf (
112114 DataType .ARRAY_B to DataType .BYTE ,
113115 DataType .ARRAY_UB to DataType .UBYTE ,
0 commit comments