aboutsummaryrefslogtreecommitdiff
path: root/src/analyze.cpp
diff options
context:
space:
mode:
authorAndrew Kelley <superjoe30@gmail.com>2017-05-17 12:26:35 -0400
committerAndrew Kelley <superjoe30@gmail.com>2017-05-17 12:26:35 -0400
commitb483db486842c6d7d348b28ca09e56673e1bd800 (patch)
tree72c392366154f45f0c657bd7650d65d9f7d9e86d /src/analyze.cpp
parent9851a943ed0360433c9612449ed065a6800adc51 (diff)
downloadzig-b483db486842c6d7d348b28ca09e56673e1bd800.tar.gz
zig-b483db486842c6d7d348b28ca09e56673e1bd800.zip
typeId builtin instead of isInteger, isFloat, etc
closes #373
Diffstat (limited to 'src/analyze.cpp')
-rw-r--r--src/analyze.cpp154
1 files changed, 154 insertions, 0 deletions
diff --git a/src/analyze.cpp b/src/analyze.cpp
index 8c27e2268f..678e0471a6 100644
--- a/src/analyze.cpp
+++ b/src/analyze.cpp
@@ -4340,3 +4340,157 @@ FnTableEntry *get_extern_panic_fn(CodeGen *g) {
return g->extern_panic_fn;
}
+static const TypeTableEntryId all_type_ids[] = {
+ TypeTableEntryIdMetaType,
+ TypeTableEntryIdVoid,
+ TypeTableEntryIdBool,
+ TypeTableEntryIdUnreachable,
+ TypeTableEntryIdInt,
+ TypeTableEntryIdFloat,
+ TypeTableEntryIdPointer,
+ TypeTableEntryIdArray,
+ TypeTableEntryIdStruct,
+ TypeTableEntryIdNumLitFloat,
+ TypeTableEntryIdNumLitInt,
+ TypeTableEntryIdUndefLit,
+ TypeTableEntryIdNullLit,
+ TypeTableEntryIdMaybe,
+ TypeTableEntryIdErrorUnion,
+ TypeTableEntryIdPureError,
+ TypeTableEntryIdEnum,
+ TypeTableEntryIdEnumTag,
+ TypeTableEntryIdUnion,
+ TypeTableEntryIdFn,
+ TypeTableEntryIdNamespace,
+ TypeTableEntryIdBlock,
+ TypeTableEntryIdBoundFn,
+ TypeTableEntryIdArgTuple,
+ TypeTableEntryIdOpaque,
+};
+
+TypeTableEntryId type_id_at_index(size_t index) {
+ assert(index < array_length(all_type_ids));
+ return all_type_ids[index];
+}
+
+size_t type_id_len() {
+ return array_length(all_type_ids);
+}
+
+size_t type_id_index(TypeTableEntryId id) {
+ switch (id) {
+ case TypeTableEntryIdInvalid:
+ case TypeTableEntryIdVar:
+ zig_unreachable();
+ case TypeTableEntryIdMetaType:
+ return 0;
+ case TypeTableEntryIdVoid:
+ return 1;
+ case TypeTableEntryIdBool:
+ return 2;
+ case TypeTableEntryIdUnreachable:
+ return 3;
+ case TypeTableEntryIdInt:
+ return 4;
+ case TypeTableEntryIdFloat:
+ return 5;
+ case TypeTableEntryIdPointer:
+ return 6;
+ case TypeTableEntryIdArray:
+ return 7;
+ case TypeTableEntryIdStruct:
+ return 8;
+ case TypeTableEntryIdNumLitFloat:
+ return 9;
+ case TypeTableEntryIdNumLitInt:
+ return 10;
+ case TypeTableEntryIdUndefLit:
+ return 11;
+ case TypeTableEntryIdNullLit:
+ return 12;
+ case TypeTableEntryIdMaybe:
+ return 13;
+ case TypeTableEntryIdErrorUnion:
+ return 14;
+ case TypeTableEntryIdPureError:
+ return 15;
+ case TypeTableEntryIdEnum:
+ return 16;
+ case TypeTableEntryIdEnumTag:
+ return 17;
+ case TypeTableEntryIdUnion:
+ return 18;
+ case TypeTableEntryIdFn:
+ return 19;
+ case TypeTableEntryIdNamespace:
+ return 20;
+ case TypeTableEntryIdBlock:
+ return 21;
+ case TypeTableEntryIdBoundFn:
+ return 22;
+ case TypeTableEntryIdArgTuple:
+ return 23;
+ case TypeTableEntryIdOpaque:
+ return 24;
+ }
+ zig_unreachable();
+}
+
+const char *type_id_name(TypeTableEntryId id) {
+ switch (id) {
+ case TypeTableEntryIdInvalid:
+ case TypeTableEntryIdVar:
+ zig_unreachable();
+ case TypeTableEntryIdMetaType:
+ return "Type";
+ case TypeTableEntryIdVoid:
+ return "Void";
+ case TypeTableEntryIdBool:
+ return "Bool";
+ case TypeTableEntryIdUnreachable:
+ return "NoReturn";
+ case TypeTableEntryIdInt:
+ return "Int";
+ case TypeTableEntryIdFloat:
+ return "Float";
+ case TypeTableEntryIdPointer:
+ return "Pointer";
+ case TypeTableEntryIdArray:
+ return "Array";
+ case TypeTableEntryIdStruct:
+ return "Struct";
+ case TypeTableEntryIdNumLitFloat:
+ return "FloatLiteral";
+ case TypeTableEntryIdNumLitInt:
+ return "IntLiteral";
+ case TypeTableEntryIdUndefLit:
+ return "UndefinedLiteral";
+ case TypeTableEntryIdNullLit:
+ return "NullLiteral";
+ case TypeTableEntryIdMaybe:
+ return "Nullable";
+ case TypeTableEntryIdErrorUnion:
+ return "ErrorUnion";
+ case TypeTableEntryIdPureError:
+ return "Error";
+ case TypeTableEntryIdEnum:
+ return "Enum";
+ case TypeTableEntryIdEnumTag:
+ return "EnumTag";
+ case TypeTableEntryIdUnion:
+ return "Union";
+ case TypeTableEntryIdFn:
+ return "Fn";
+ case TypeTableEntryIdNamespace:
+ return "Namespace";
+ case TypeTableEntryIdBlock:
+ return "Block";
+ case TypeTableEntryIdBoundFn:
+ return "BoundFn";
+ case TypeTableEntryIdArgTuple:
+ return "ArgTuple";
+ case TypeTableEntryIdOpaque:
+ return "Opaque";
+ }
+ zig_unreachable();
+}