Fix a bunch of ifdirective related issues in Ink. Load the UI rect shader in ensom.

This commit is contained in:
2025-10-01 21:43:52 +02:00
parent 39d2fe6ad0
commit afced44abe
16 changed files with 172 additions and 152 deletions

View File

@@ -0,0 +1,8 @@
scope (global) [
[VSInput] : {position : float2, color : float4, color : float4, uv : float2}
scope (VSInput) [
[position] : float2
[uv] : float2
[color] : float4
]
]

View File

@@ -1,8 +1,7 @@
scope (global) [
[pixel__ps_main] : ()
scope (pixel__ps_main) [ scope (block) [
[alpha_color] : float4
[f] : float
]
scope (pixel__ps_main) [
[alpha_color] : float4
[f] : float
]
]

View File

@@ -45,3 +45,4 @@ test/use_builtin_functions.ink check
test/wrong_argument_count.ink check
test/wrong_multiply.ink check
test/wrong_type_for_function.ink check
test/hint_in_struct.ink check

View File

@@ -28,3 +28,4 @@ test/simple_struct_access.ink codegen
test/struct_within_struct.ink codegen
test/unary.ink codegen
test/use_builtin_functions.ink codegen
test/hint_in_struct.ink codegen

View File

@@ -27,4 +27,5 @@ test/simple_if.ink compile
test/simple_struct_access.ink compile
test/struct_within_struct.ink compile
test/unary.ink compile
test/use_builtin_functions.ink compile
test/use_builtin_functions.ink compile
test/hint_in_struct.ink compile

View File

@@ -1,4 +1,4 @@
p :: properties {
p :: Constant_Buffer {
time : float @time;
}

10
test/hint_in_struct.ink Normal file
View File

@@ -0,0 +1,10 @@
#add_define UV
VSInput :: struct {
position : float2 @position;
color : float4 @color;
#if Env.UV {
uv : float2 @UV;
}
}

View File

@@ -1,81 +1,81 @@
{kind = TOKEN_IDENTIFIER; ; index = 0 ; length = 1 line = 1 ; column = 0 ; value ='p'; }
{kind = TOKEN_DOUBLECOLON; ; index = 2 ; length = 2 line = 1 ; column = 2 ; value ='::'; }
{kind = TOKEN_PROPERTIES; ; index = 5 ; length = 10 line = 1 ; column = 5 ; value ='properties'; }
{kind = TOKEN_LEFTBRACE; ; index = 16 ; length = 1 line = 1 ; column = 16 ; value ='{'; }
{kind = TOKEN_IDENTIFIER; ; index = 20 ; length = 4 line = 2 ; column = 0 ; value ='time'; }
{kind = TOKEN_COLON; ; index = 25 ; length = 1 line = 2 ; column = 5 ; value =':'; }
{kind = TOKEN_IDENTIFIER; ; index = 27 ; length = 5 line = 2 ; column = 7 ; value ='float'; }
{kind = TOKEN_AT; ; index = 33 ; length = 1 line = 2 ; column = 13 ; value ='@'; }
{kind = TOKEN_IDENTIFIER; ; index = 34 ; length = 4 line = 2 ; column = 14 ; value ='time'; }
{kind = TOKEN_SEMICOLON; ; index = 38 ; length = 1 line = 2 ; column = 18 ; value =';'; }
{kind = TOKEN_RIGHTBRACE; ; index = 41 ; length = 1 line = 3 ; column = 0 ; value ='}'; }
{kind = TOKEN_VERTEX; ; index = 46 ; length = 6 line = 5 ; column = 0 ; value ='vertex'; }
{kind = TOKEN_IDENTIFIER; ; index = 53 ; length = 4 line = 5 ; column = 7 ; value ='main'; }
{kind = TOKEN_DOUBLECOLON; ; index = 58 ; length = 2 line = 5 ; column = 12 ; value ='::'; }
{kind = TOKEN_LEFTPAREN; ; index = 61 ; length = 1 line = 5 ; column = 15 ; value ='('; }
{kind = TOKEN_IDENTIFIER; ; index = 62 ; length = 3 line = 5 ; column = 16 ; value ='pos'; }
{kind = TOKEN_COLON; ; index = 66 ; length = 1 line = 5 ; column = 20 ; value =':'; }
{kind = TOKEN_IDENTIFIER; ; index = 68 ; length = 6 line = 5 ; column = 22 ; value ='float3'; }
{kind = TOKEN_AT; ; index = 75 ; length = 1 line = 5 ; column = 29 ; value ='@'; }
{kind = TOKEN_IDENTIFIER; ; index = 76 ; length = 8 line = 5 ; column = 30 ; value ='position'; }
{kind = TOKEN_RIGHTPAREN; ; index = 84 ; length = 1 line = 5 ; column = 38 ; value =')'; }
{kind = TOKEN_ARROW; ; index = 86 ; length = 2 line = 5 ; column = 40 ; value ='->'; }
{kind = TOKEN_IDENTIFIER; ; index = 89 ; length = 6 line = 5 ; column = 43 ; value ='float4'; }
{kind = TOKEN_AT; ; index = 96 ; length = 1 line = 5 ; column = 50 ; value ='@'; }
{kind = TOKEN_IDENTIFIER; ; index = 97 ; length = 8 line = 5 ; column = 51 ; value ='position'; }
{kind = TOKEN_LEFTBRACE; ; index = 106 ; length = 1 line = 5 ; column = 60 ; value ='{'; }
{kind = TOKEN_RETURN; ; index = 110 ; length = 6 line = 6 ; column = 0 ; value ='return'; }
{kind = TOKEN_IDENTIFIER; ; index = 117 ; length = 6 line = 6 ; column = 7 ; value ='float4'; }
{kind = TOKEN_LEFTPAREN; ; index = 123 ; length = 1 line = 6 ; column = 13 ; value ='('; }
{kind = TOKEN_IDENTIFIER; ; index = 124 ; length = 3 line = 6 ; column = 14 ; value ='pos'; }
{kind = TOKEN_DOT; ; index = 127 ; length = 1 line = 6 ; column = 17 ; value ='.'; }
{kind = TOKEN_IDENTIFIER; ; index = 128 ; length = 1 line = 6 ; column = 18 ; value ='x'; }
{kind = TOKEN_COMMA; ; index = 129 ; length = 1 line = 6 ; column = 19 ; value =','; }
{kind = TOKEN_IDENTIFIER; ; index = 131 ; length = 3 line = 6 ; column = 21 ; value ='pos'; }
{kind = TOKEN_DOT; ; index = 134 ; length = 1 line = 6 ; column = 24 ; value ='.'; }
{kind = TOKEN_IDENTIFIER; ; index = 135 ; length = 1 line = 6 ; column = 25 ; value ='y'; }
{kind = TOKEN_COMMA; ; index = 136 ; length = 1 line = 6 ; column = 26 ; value =','; }
{kind = TOKEN_IDENTIFIER; ; index = 138 ; length = 3 line = 6 ; column = 28 ; value ='pos'; }
{kind = TOKEN_DOT; ; index = 141 ; length = 1 line = 6 ; column = 31 ; value ='.'; }
{kind = TOKEN_IDENTIFIER; ; index = 142 ; length = 1 line = 6 ; column = 32 ; value ='z'; }
{kind = TOKEN_COMMA; ; index = 143 ; length = 1 line = 6 ; column = 33 ; value =','; }
{kind = TOKEN_FLOATLITERAL; ; index = 145 ; length = 3 line = 6 ; column = 35 ; value ='1'; }
{kind = TOKEN_RIGHTPAREN; ; index = 148 ; length = 1 line = 6 ; column = 38 ; value =')'; }
{kind = TOKEN_SEMICOLON; ; index = 149 ; length = 1 line = 6 ; column = 39 ; value =';'; }
{kind = TOKEN_RIGHTBRACE; ; index = 152 ; length = 1 line = 7 ; column = 0 ; value ='}'; }
{kind = TOKEN_PIXEL; ; index = 157 ; length = 5 line = 9 ; column = 0 ; value ='pixel'; }
{kind = TOKEN_IDENTIFIER; ; index = 163 ; length = 4 line = 9 ; column = 6 ; value ='main'; }
{kind = TOKEN_DOUBLECOLON; ; index = 168 ; length = 2 line = 9 ; column = 11 ; value ='::'; }
{kind = TOKEN_LEFTPAREN; ; index = 171 ; length = 1 line = 9 ; column = 14 ; value ='('; }
{kind = TOKEN_IDENTIFIER; ; index = 172 ; length = 3 line = 9 ; column = 15 ; value ='pos'; }
{kind = TOKEN_COLON; ; index = 176 ; length = 1 line = 9 ; column = 19 ; value =':'; }
{kind = TOKEN_IDENTIFIER; ; index = 178 ; length = 6 line = 9 ; column = 21 ; value ='float4'; }
{kind = TOKEN_AT; ; index = 185 ; length = 1 line = 9 ; column = 28 ; value ='@'; }
{kind = TOKEN_IDENTIFIER; ; index = 186 ; length = 11 line = 9 ; column = 29 ; value ='outposition'; }
{kind = TOKEN_RIGHTPAREN; ; index = 197 ; length = 1 line = 9 ; column = 40 ; value =')'; }
{kind = TOKEN_ARROW; ; index = 199 ; length = 2 line = 9 ; column = 42 ; value ='->'; }
{kind = TOKEN_IDENTIFIER; ; index = 202 ; length = 6 line = 9 ; column = 45 ; value ='float4'; }
{kind = TOKEN_AT; ; index = 209 ; length = 1 line = 9 ; column = 52 ; value ='@'; }
{kind = TOKEN_IDENTIFIER; ; index = 210 ; length = 6 line = 9 ; column = 53 ; value ='target'; }
{kind = TOKEN_LEFTBRACE; ; index = 217 ; length = 1 line = 9 ; column = 60 ; value ='{'; }
{kind = TOKEN_IDENTIFIER; ; index = 221 ; length = 1 line = 10 ; column = 0 ; value ='t'; }
{kind = TOKEN_COLON; ; index = 223 ; length = 1 line = 10 ; column = 2 ; value =':'; }
{kind = TOKEN_ASSIGN; ; index = 224 ; length = 1 line = 10 ; column = 3 ; value ='='; }
{kind = TOKEN_IDENTIFIER; ; index = 226 ; length = 1 line = 10 ; column = 5 ; value ='p'; }
{kind = TOKEN_DOT; ; index = 227 ; length = 1 line = 10 ; column = 6 ; value ='.'; }
{kind = TOKEN_IDENTIFIER; ; index = 228 ; length = 4 line = 10 ; column = 7 ; value ='time'; }
{kind = TOKEN_SEMICOLON; ; index = 232 ; length = 1 line = 10 ; column = 11 ; value =';'; }
{kind = TOKEN_RETURN; ; index = 236 ; length = 6 line = 11 ; column = 0 ; value ='return'; }
{kind = TOKEN_IDENTIFIER; ; index = 243 ; length = 6 line = 11 ; column = 7 ; value ='float4'; }
{kind = TOKEN_LEFTPAREN; ; index = 249 ; length = 1 line = 11 ; column = 13 ; value ='('; }
{kind = TOKEN_INTLITERAL; ; index = 250 ; length = 1 line = 11 ; column = 14 ; value ='1'; }
{kind = TOKEN_COMMA; ; index = 251 ; length = 1 line = 11 ; column = 15 ; value =','; }
{kind = TOKEN_INTLITERAL; ; index = 253 ; length = 1 line = 11 ; column = 17 ; value ='1'; }
{kind = TOKEN_COMMA; ; index = 254 ; length = 1 line = 11 ; column = 18 ; value =','; }
{kind = TOKEN_INTLITERAL; ; index = 256 ; length = 1 line = 11 ; column = 20 ; value ='1'; }
{kind = TOKEN_COMMA; ; index = 257 ; length = 1 line = 11 ; column = 21 ; value =','; }
{kind = TOKEN_INTLITERAL; ; index = 259 ; length = 1 line = 11 ; column = 23 ; value ='1'; }
{kind = TOKEN_RIGHTPAREN; ; index = 260 ; length = 1 line = 11 ; column = 24 ; value =')'; }
{kind = TOKEN_SEMICOLON; ; index = 261 ; length = 1 line = 11 ; column = 25 ; value =';'; }
{kind = TOKEN_RIGHTBRACE; ; index = 264 ; length = 1 line = 12 ; column = 0 ; value ='}'; }
{kind = TOKEN_EOF; ; index = 267 ; length = 0 line = 13 ; column = 0 ; value =''; }
{kind = TOKEN_CONSTANT_BUFFER; ; index = 5 ; length = 15 line = 1 ; column = 5 ; value ='Constant_Buffer'; }
{kind = TOKEN_LEFTBRACE; ; index = 21 ; length = 1 line = 1 ; column = 21 ; value ='{'; }
{kind = TOKEN_IDENTIFIER; ; index = 25 ; length = 4 line = 2 ; column = 0 ; value ='time'; }
{kind = TOKEN_COLON; ; index = 30 ; length = 1 line = 2 ; column = 5 ; value =':'; }
{kind = TOKEN_IDENTIFIER; ; index = 32 ; length = 5 line = 2 ; column = 7 ; value ='float'; }
{kind = TOKEN_AT; ; index = 38 ; length = 1 line = 2 ; column = 13 ; value ='@'; }
{kind = TOKEN_IDENTIFIER; ; index = 39 ; length = 4 line = 2 ; column = 14 ; value ='time'; }
{kind = TOKEN_SEMICOLON; ; index = 43 ; length = 1 line = 2 ; column = 18 ; value =';'; }
{kind = TOKEN_RIGHTBRACE; ; index = 46 ; length = 1 line = 3 ; column = 0 ; value ='}'; }
{kind = TOKEN_VERTEX; ; index = 51 ; length = 6 line = 5 ; column = 0 ; value ='vertex'; }
{kind = TOKEN_IDENTIFIER; ; index = 58 ; length = 4 line = 5 ; column = 7 ; value ='main'; }
{kind = TOKEN_DOUBLECOLON; ; index = 63 ; length = 2 line = 5 ; column = 12 ; value ='::'; }
{kind = TOKEN_LEFTPAREN; ; index = 66 ; length = 1 line = 5 ; column = 15 ; value ='('; }
{kind = TOKEN_IDENTIFIER; ; index = 67 ; length = 3 line = 5 ; column = 16 ; value ='pos'; }
{kind = TOKEN_COLON; ; index = 71 ; length = 1 line = 5 ; column = 20 ; value =':'; }
{kind = TOKEN_IDENTIFIER; ; index = 73 ; length = 6 line = 5 ; column = 22 ; value ='float3'; }
{kind = TOKEN_AT; ; index = 80 ; length = 1 line = 5 ; column = 29 ; value ='@'; }
{kind = TOKEN_IDENTIFIER; ; index = 81 ; length = 8 line = 5 ; column = 30 ; value ='position'; }
{kind = TOKEN_RIGHTPAREN; ; index = 89 ; length = 1 line = 5 ; column = 38 ; value =')'; }
{kind = TOKEN_ARROW; ; index = 91 ; length = 2 line = 5 ; column = 40 ; value ='->'; }
{kind = TOKEN_IDENTIFIER; ; index = 94 ; length = 6 line = 5 ; column = 43 ; value ='float4'; }
{kind = TOKEN_AT; ; index = 101 ; length = 1 line = 5 ; column = 50 ; value ='@'; }
{kind = TOKEN_IDENTIFIER; ; index = 102 ; length = 8 line = 5 ; column = 51 ; value ='position'; }
{kind = TOKEN_LEFTBRACE; ; index = 111 ; length = 1 line = 5 ; column = 60 ; value ='{'; }
{kind = TOKEN_RETURN; ; index = 115 ; length = 6 line = 6 ; column = 0 ; value ='return'; }
{kind = TOKEN_IDENTIFIER; ; index = 122 ; length = 6 line = 6 ; column = 7 ; value ='float4'; }
{kind = TOKEN_LEFTPAREN; ; index = 128 ; length = 1 line = 6 ; column = 13 ; value ='('; }
{kind = TOKEN_IDENTIFIER; ; index = 129 ; length = 3 line = 6 ; column = 14 ; value ='pos'; }
{kind = TOKEN_DOT; ; index = 132 ; length = 1 line = 6 ; column = 17 ; value ='.'; }
{kind = TOKEN_IDENTIFIER; ; index = 133 ; length = 1 line = 6 ; column = 18 ; value ='x'; }
{kind = TOKEN_COMMA; ; index = 134 ; length = 1 line = 6 ; column = 19 ; value =','; }
{kind = TOKEN_IDENTIFIER; ; index = 136 ; length = 3 line = 6 ; column = 21 ; value ='pos'; }
{kind = TOKEN_DOT; ; index = 139 ; length = 1 line = 6 ; column = 24 ; value ='.'; }
{kind = TOKEN_IDENTIFIER; ; index = 140 ; length = 1 line = 6 ; column = 25 ; value ='y'; }
{kind = TOKEN_COMMA; ; index = 141 ; length = 1 line = 6 ; column = 26 ; value =','; }
{kind = TOKEN_IDENTIFIER; ; index = 143 ; length = 3 line = 6 ; column = 28 ; value ='pos'; }
{kind = TOKEN_DOT; ; index = 146 ; length = 1 line = 6 ; column = 31 ; value ='.'; }
{kind = TOKEN_IDENTIFIER; ; index = 147 ; length = 1 line = 6 ; column = 32 ; value ='z'; }
{kind = TOKEN_COMMA; ; index = 148 ; length = 1 line = 6 ; column = 33 ; value =','; }
{kind = TOKEN_FLOATLITERAL; ; index = 150 ; length = 3 line = 6 ; column = 35 ; value ='1'; }
{kind = TOKEN_RIGHTPAREN; ; index = 153 ; length = 1 line = 6 ; column = 38 ; value =')'; }
{kind = TOKEN_SEMICOLON; ; index = 154 ; length = 1 line = 6 ; column = 39 ; value =';'; }
{kind = TOKEN_RIGHTBRACE; ; index = 157 ; length = 1 line = 7 ; column = 0 ; value ='}'; }
{kind = TOKEN_PIXEL; ; index = 162 ; length = 5 line = 9 ; column = 0 ; value ='pixel'; }
{kind = TOKEN_IDENTIFIER; ; index = 168 ; length = 4 line = 9 ; column = 6 ; value ='main'; }
{kind = TOKEN_DOUBLECOLON; ; index = 173 ; length = 2 line = 9 ; column = 11 ; value ='::'; }
{kind = TOKEN_LEFTPAREN; ; index = 176 ; length = 1 line = 9 ; column = 14 ; value ='('; }
{kind = TOKEN_IDENTIFIER; ; index = 177 ; length = 3 line = 9 ; column = 15 ; value ='pos'; }
{kind = TOKEN_COLON; ; index = 181 ; length = 1 line = 9 ; column = 19 ; value =':'; }
{kind = TOKEN_IDENTIFIER; ; index = 183 ; length = 6 line = 9 ; column = 21 ; value ='float4'; }
{kind = TOKEN_AT; ; index = 190 ; length = 1 line = 9 ; column = 28 ; value ='@'; }
{kind = TOKEN_IDENTIFIER; ; index = 191 ; length = 11 line = 9 ; column = 29 ; value ='outposition'; }
{kind = TOKEN_RIGHTPAREN; ; index = 202 ; length = 1 line = 9 ; column = 40 ; value =')'; }
{kind = TOKEN_ARROW; ; index = 204 ; length = 2 line = 9 ; column = 42 ; value ='->'; }
{kind = TOKEN_IDENTIFIER; ; index = 207 ; length = 6 line = 9 ; column = 45 ; value ='float4'; }
{kind = TOKEN_AT; ; index = 214 ; length = 1 line = 9 ; column = 52 ; value ='@'; }
{kind = TOKEN_IDENTIFIER; ; index = 215 ; length = 6 line = 9 ; column = 53 ; value ='target'; }
{kind = TOKEN_LEFTBRACE; ; index = 222 ; length = 1 line = 9 ; column = 60 ; value ='{'; }
{kind = TOKEN_IDENTIFIER; ; index = 226 ; length = 1 line = 10 ; column = 0 ; value ='t'; }
{kind = TOKEN_COLON; ; index = 228 ; length = 1 line = 10 ; column = 2 ; value =':'; }
{kind = TOKEN_ASSIGN; ; index = 229 ; length = 1 line = 10 ; column = 3 ; value ='='; }
{kind = TOKEN_IDENTIFIER; ; index = 231 ; length = 1 line = 10 ; column = 5 ; value ='p'; }
{kind = TOKEN_DOT; ; index = 232 ; length = 1 line = 10 ; column = 6 ; value ='.'; }
{kind = TOKEN_IDENTIFIER; ; index = 233 ; length = 4 line = 10 ; column = 7 ; value ='time'; }
{kind = TOKEN_SEMICOLON; ; index = 237 ; length = 1 line = 10 ; column = 11 ; value =';'; }
{kind = TOKEN_RETURN; ; index = 241 ; length = 6 line = 11 ; column = 0 ; value ='return'; }
{kind = TOKEN_IDENTIFIER; ; index = 248 ; length = 6 line = 11 ; column = 7 ; value ='float4'; }
{kind = TOKEN_LEFTPAREN; ; index = 254 ; length = 1 line = 11 ; column = 13 ; value ='('; }
{kind = TOKEN_INTLITERAL; ; index = 255 ; length = 1 line = 11 ; column = 14 ; value ='1'; }
{kind = TOKEN_COMMA; ; index = 256 ; length = 1 line = 11 ; column = 15 ; value =','; }
{kind = TOKEN_INTLITERAL; ; index = 258 ; length = 1 line = 11 ; column = 17 ; value ='1'; }
{kind = TOKEN_COMMA; ; index = 259 ; length = 1 line = 11 ; column = 18 ; value =','; }
{kind = TOKEN_INTLITERAL; ; index = 261 ; length = 1 line = 11 ; column = 20 ; value ='1'; }
{kind = TOKEN_COMMA; ; index = 262 ; length = 1 line = 11 ; column = 21 ; value =','; }
{kind = TOKEN_INTLITERAL; ; index = 264 ; length = 1 line = 11 ; column = 23 ; value ='1'; }
{kind = TOKEN_RIGHTPAREN; ; index = 265 ; length = 1 line = 11 ; column = 24 ; value =')'; }
{kind = TOKEN_SEMICOLON; ; index = 266 ; length = 1 line = 11 ; column = 25 ; value =';'; }
{kind = TOKEN_RIGHTBRACE; ; index = 269 ; length = 1 line = 12 ; column = 0 ; value ='}'; }
{kind = TOKEN_EOF; ; index = 272 ; length = 0 line = 13 ; column = 0 ; value =''; }

View File

@@ -53,3 +53,4 @@ test/use_builtin_functions.ink lex
test/wrong_argument_count.ink lex
test/wrong_multiply.ink lex
test/wrong_type_for_function.ink lex
test/hint_in_struct.ink lex

View File

@@ -0,0 +1,6 @@
(program
(struct VSInput
[(:= position float2 (@position))
(:= color float4 (@color))
(#if Env.UV
(:= uv float2 (@UV)))]))

View File

@@ -53,3 +53,4 @@ test/use_builtin_functions.ink parse
test/wrong_argument_count.ink parse
test/wrong_multiply.ink parse
test/wrong_type_for_function.ink parse
test/hint_in_struct.ink parse