aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/sdlang/util.d
diff options
context:
space:
mode:
Diffstat (limited to 'src/sdlang/util.d')
-rw-r--r--src/sdlang/util.d84
1 files changed, 84 insertions, 0 deletions
diff --git a/src/sdlang/util.d b/src/sdlang/util.d
new file mode 100644
index 0000000..329e387
--- /dev/null
+++ b/src/sdlang/util.d
@@ -0,0 +1,84 @@
+// SDLang-D
+// Written in the D programming language.
+
+module sdlang.util;
+
+import std.algorithm;
+import std.datetime;
+import std.stdio;
+import std.string;
+
+import sdlang.token;
+
+enum sdlangVersion = "0.9.1";
+
+alias immutable(ubyte)[] ByteString;
+
+auto startsWith(T)(string haystack, T needle)
+ if( is(T:ByteString) || is(T:string) )
+{
+ return std.algorithm.startsWith( cast(ByteString)haystack, cast(ByteString)needle );
+}
+
+struct Location
+{
+ string file; /// Filename (including path)
+ int line; /// Zero-indexed
+ int col; /// Zero-indexed, Tab counts as 1
+ size_t index; /// Index into the source
+
+ this(int line, int col, int index)
+ {
+ this.line = line;
+ this.col = col;
+ this.index = index;
+ }
+
+ this(string file, int line, int col, int index)
+ {
+ this.file = file;
+ this.line = line;
+ this.col = col;
+ this.index = index;
+ }
+
+ string toString()
+ {
+ return "%s(%s:%s)".format(file, line+1, col+1);
+ }
+}
+
+void removeIndex(E)(ref E[] arr, ptrdiff_t index)
+{
+ arr = arr[0..index] ~ arr[index+1..$];
+}
+
+void trace(string file=__FILE__, size_t line=__LINE__, TArgs...)(TArgs args)
+{
+ version(sdlangTrace)
+ {
+ writeln(file, "(", line, "): ", args);
+ stdout.flush();
+ }
+}
+
+string toString(TypeInfo ti)
+{
+ if (ti == typeid( bool )) return "bool";
+ else if(ti == typeid( string )) return "string";
+ else if(ti == typeid( dchar )) return "dchar";
+ else if(ti == typeid( int )) return "int";
+ else if(ti == typeid( long )) return "long";
+ else if(ti == typeid( float )) return "float";
+ else if(ti == typeid( double )) return "double";
+ else if(ti == typeid( real )) return "real";
+ else if(ti == typeid( Date )) return "Date";
+ else if(ti == typeid( DateTimeFrac )) return "DateTimeFrac";
+ else if(ti == typeid( DateTimeFracUnknownZone )) return "DateTimeFracUnknownZone";
+ else if(ti == typeid( SysTime )) return "SysTime";
+ else if(ti == typeid( Duration )) return "Duration";
+ else if(ti == typeid( ubyte[] )) return "ubyte[]";
+ else if(ti == typeid( typeof(null) )) return "null";
+
+ return "{unknown}";
+}