@@ -298,6 +298,13 @@ static PxTokenType identifierType(Scanner *scanner) {
298298 }
299299 }
300300 break ;
301+ case 'g' :
302+ if (scanner -> current - scanner -> start > 1 ) {
303+ switch (scanner -> start [1 ]) {
304+ case 'p' : return checkKeyword (scanner , 2 , 1 , "u" , TOKEN_GPU ); // gpu
305+ }
306+ }
307+ break ;
301308 case 'f' :
302309 if (scanner -> current - scanner -> start > 1 ) {
303310 switch (scanner -> start [1 ]) {
@@ -350,14 +357,26 @@ static PxTokenType identifierType(Scanner *scanner) {
350357 return checkKeyword (scanner , 2 , 0 , "" , TOKEN_IS );
351358 }
352359 }
353- break ;
360+ case 'k' :
361+ if (scanner -> current - scanner -> start > 1 ) {
362+ switch (scanner -> start [1 ]) {
363+ case 'e' : return checkKeyword (scanner , 2 , 4 , "rnel" , TOKEN_KERNEL ); // kernel
364+ }
365+ }
366+ break ;
354367 case 'l' :
355368 return checkKeyword (scanner , 1 , 2 , "et" , TOKEN_LET );
356369 case 'm' : // Added for 'match' and 'model'
357370 if (scanner -> current - scanner -> start > 1 ) {
358371 switch (scanner -> start [1 ]) {
359372 case 'a' :
360- return checkKeyword (scanner , 2 , 3 , "tch" , TOKEN_MATCH );
373+ if (scanner -> current - scanner -> start > 2 ) {
374+ if (scanner -> start [2 ] == 't' && scanner -> current - scanner -> start > 3 && scanner -> start [3 ] == 'r' ) {
375+ return checkKeyword (scanner , 4 , 2 , "ix" , TOKEN_MATRIX ); // matrix
376+ }
377+ return checkKeyword (scanner , 2 , 3 , "tch" , TOKEN_MATCH );
378+ }
379+ break ;
361380 case 'o' :
362381 return checkKeyword (scanner , 2 , 3 , "del" , TOKEN_MODEL ); // model
363382 case 'u' :
@@ -400,7 +419,7 @@ static PxTokenType identifierType(Scanner *scanner) {
400419 }
401420 break ;
402421 case 'r' :
403- if (scanner -> current - scanner -> start > 2 ) {
422+ if (scanner -> current - scanner -> start > 2 ) {
404423 switch (scanner -> start [2 ]) {
405424 case 'e' : // predict
406425 return checkKeyword (scanner , 3 , 4 , "dict" , TOKEN_PREDICT );
@@ -486,7 +505,13 @@ static PxTokenType identifierType(Scanner *scanner) {
486505 case 't' :
487506 if (scanner -> current - scanner -> start > 1 ) {
488507 switch (scanner -> start [1 ]) {
489- case 'h' :
508+ case 'e' :
509+ if (scanner -> current - scanner -> start > 2 ) {
510+ if (scanner -> start [2 ] == 'm' ) return checkKeyword (scanner , 3 , 5 , "poral" , TOKEN_TEMPORAL );
511+ if (scanner -> start [2 ] == 'n' ) return checkKeyword (scanner , 3 , 3 , "sor" , TOKEN_TENSOR );
512+ }
513+ break ;
514+ case 'h' :
490515 if (scanner -> current - scanner -> start > 2 ) {
491516 switch (scanner -> start [2 ]) {
492517 case 'i' :
0 commit comments