static inline Type* get_expression_type(AstTyped* expr) {
switch (expr->kind) {
case Ast_Kind_Block: case Ast_Kind_If: case Ast_Kind_While: return NULL;
+ case Ast_Kind_Typeof: return &basic_types[Basic_Kind_Type_Index];
default: return expr->type;
}
}
// GROSS: Using void* to avoid having to cast everything.
const char* node_get_type_name(void* node) {
- if (node_is_type((AstNode *) node)) return "type_expr";
-
if (((AstNode *) node)->kind == Ast_Kind_Argument) {
return node_get_type_name(((AstArgument *) node)->value);
}
{ Type_Kind_Basic, 0, 0, (AstType *) &basic_type_f64x2, { Basic_Kind_F64X2, Basic_Flag_SIMD, 16, 16, "f64x2" } },
{ Type_Kind_Basic, 0, 0, (AstType *) &basic_type_v128, { Basic_Kind_V128, Basic_Flag_SIMD, 16, 16, "v128" } },
- { Type_Kind_Basic, 0, 0, NULL, { Basic_Kind_Type_Index, Basic_Flag_Type_Index, 4, 4, "type_expr" } },
+ { Type_Kind_Basic, 0, 0, (AstType *) &basic_type_type_expr, { Basic_Kind_Type_Index, Basic_Flag_Type_Index, 4, 4, "type_expr" } },
};
// TODO: Document this!!
<array>
<dict>
<key>match</key>
- <string>\\(\\|[abefnrut"0]|x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8}|[0-7]{3})</string>
+ <string>\\(\\|[abefnrut'"0]|x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8}|[0-7]{3})</string>
<key>name</key>
<string>constant.character.escape.onyx</string>
</dict>
</dict>
</array>
</dict>
+ <dict>
+ <key>begin</key>
+ <string>'</string>
+ <key>beginCaptures</key>
+ <dict>
+ <key>0</key>
+ <dict>
+ <key>name</key>
+ <string>punctuation.definition.string.begin.onyx</string>
+ </dict>
+ </dict>
+ <key>end</key>
+ <string>'</string>
+ <key>endCaptures</key>
+ <dict>
+ <key>0</key>
+ <dict>
+ <key>name</key>
+ <string>punctuation.definition.string.end.onyx</string>
+ </dict>
+ </dict>
+ <key>name</key>
+ <string>string.quoted.double.onyx</string>
+ <key>patterns</key>
+ <array>
+ <dict>
+ <key>include</key>
+ <string>#string_escaped_char</string>
+ </dict>
+ </array>
+ </dict>
</array>
</dict>