diff options
Diffstat (limited to 'src/sdlang/util.d')
| -rw-r--r-- | src/sdlang/util.d | 84 | 
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}"; +} | 
