Click here to Skip to main content
15,892,072 members
Articles / Programming Languages / Visual Basic

Flee - Fast Lightweight Expression Evaluator

Rate me:
Please Sign up or sign in to vote.
4.91/5 (47 votes)
11 Oct 2007LGPL310 min read 196.1K   3.7K   108  
A .NET expression evaluator that compiles to IL and is designed for speed.
' Valid explicit cast expressions
' Casts to numeric types
'	Conversions to same type
byte;cast(bytea,byte);50
sbyte;cast(sbytea,sbyte);-10
int16;cast(int16a, short);-10
uint16;cast(uint16a, ushort);100
int32;cast(100, int);100
uint32;cast(100U, uint);100
int64;cast(100L, long);100
uint64;cast(100UL, ulong);100
single;cast(123.25f, single);123.25
double;cast(123.25, double);123.25
'	Cast resulting in implicit conversion
'	Sbyte
int16;cast(sbytea, int16);-10
int32;cast(sbytea,int);-10
int64;cast(sbytea,long);-10
single;cast(sbytea, single);-10.0
double;cast(sbytea, double);-10.0
'	Byte
uint16;cast(bytea, uint16);50
int32;cast(bytea,int);50
int64;cast(bytea, long);50
uint64;cast(bytea, ulong);50
single;cast(bytea, single);50
double;cast(bytea, double);50
'	int16
int32;cast(int16a, int);-10
int64;cast(int16a, long);-10
single;cast(int16a, single);-10.0
double;cast(int16a, double);-10.0
'	uint16
int32;cast(uint16a, int);100
uint32;cast(uint16a, uint);100
int64;cast(uint16a, long);100
uint64;cast(uint16a, ulong);100
single;cast(uint16a, single);100
double;cast(uint16a, double);100
'	large integers
int64;cast(100, long);100
uint64;cast(100U,ulong);100
double;cast(100U, double);100
double;cast(-100L, double);-100.0
double;cast(100UL, double);100.0
'	single
double;cast(1200.5f, double);1200.5
'	Narrowing conversions
'	Byte
byte;cast(100,byte);100
byte;cast(100U,byte);100
byte;cast(100L,byte);100
byte;cast(100UL,byte);100
byte;cast(-1, byte);255
byte;cast(sbytea,byte);246
byte;cast(uint16a,byte);100
byte;cast(int16a,byte);246
byte;cast(120.25f, byte);120
byte;cast(120.5,byte);120
'	Sbyte
sbyte;cast(-1,sbyte);-1
sbyte;cast(-1L,sbyte);-1
sbyte;cast(100U, sbyte);100
sbyte;cast(100UL, sbyte);100
sbyte;cast(bytea, sbyte);50
sbyte;cast(int16a, sbyte);-10
sbyte;cast(uint16a, sbyte);100
sbyte;cast(-120.5f, sbyte);-120
sbyte;cast(-120.5, sbyte);-120
'	Uint16
Uint16;cast(100,ushort);100
Uint16;cast(100U,ushort);100
Uint16;cast(100L,ushort);100
Uint16;cast(100UL,ushort);100
Uint16;cast(-1, ushort);65535
Uint16;cast(sbytea,ushort);65526
Uint16;cast(uint16a,ushort);100
Uint16;cast(int16a,ushort);65526
Uint16;cast(120.25f, ushort);120
Uint16;cast(120.5,ushort);120
'	int16
int16;cast(-1,int16);-1
int16;cast(-1L,int16);-1
int16;cast(100U, int16);100
int16;cast(100UL, int16);100
int16;cast(bytea, int16);50
int16;cast(int16a, int16);-10
int16;cast(uint16a, int16);100
int16;cast(-120.5f, int16);-120
int16;cast(-120.5, int16);-120
'	int32
int32;cast(100U, int);100
int32;cast(100L, int);100
int32;cast(-10000.25, int);-10000
int32;cast(-10000.5F, int);-10000
'	uint32
uint32;cast(100U, uint);100
uint32;cast(100L, uint);100
uint32;cast(-1L, uint);4294967295
uint32;cast(UInt64.Maxvalue, uint);4294967295
uint32;cast(Int64.Maxvalue, uint);4294967295
uint32;cast(10000.25, uint);10000
uint32;cast(10000.5F, uint);10000
'	int64
int64;cast(10000.5, long);10000
int64;cast(-10000.5f, long);-10000
int64;cast(uint64.maxvalue, long);-1
'	uint64
uint64;cast(int64.minvalue, ulong);9223372036854775808
uint64;cast(int64.maxvalue, ulong);9223372036854775807
uint64;cast(10000.5, ulong);10000
uint64;cast(10000.5f, ulong);10000
'	single
single;cast(12345.25, single);12345.25
'	with complex expressions
int32;cast(convert.todouble("100.25"), int);100
int32;cast(4 ^ 4, int);256
double;cast(100, double) / 3;33.3333
int32;cast(cast(100,double) / 3, int);33
' Identity casts
'	Value types
boolean;cast(true, boolean);true
object;cast(guida, Guid);System.guid
object;cast(DayofWeek.Friday, DayofWeek);System.DayOfWeek
char;cast('^',char);^
'	Reference types
string;cast("abc", string);abc
object;cast(Versiona, Version);System.Version
object;cast(DelegateA, AppDomainInitializer);System.AppDomainInitializer
object;cast(StringArr, string[]);System.string[]
' Casts that are already implicitly valid
double;cast(100,double);100.0
object;cast(100, valuetype);System.int32
object;cast(true,object);System.boolean
object;cast("abc",object);System.string
int32;cast('^', int);94
double;cast('^', double);94.0
object;cast(Icloneablea, object);System.string
object;cast(DoubleArr, object);System.double[]
object;cast(100.24, IComparable);System.double
object;cast("abc", ICloneable);System.string
object;cast(structa, object);Tests.TestStruct
object;cast(structa, ValueType);Tests.TestStruct
object;cast(structa, IComparable);Tests.TestStruct
object;cast(doubleArr, ICloneable);System.double[]
object;cast(stringArr, ICloneable);System.string[]
object;cast(stringarr, object);System.string[]
object;cast(intarr, object);System.int32[]
object;cast(stringarr, Array);System.string[]
object;cast(intarr, Array);System.int32[]
object;cast(arraya, object);System.string[]
object;cast(stringarr, string[]);System.string[]
object;cast(intarr, int[]);System.int32[]
object;cast(DelegateA, Delegate);System.AppDomainInitializer
object;cast(DelegateA, object);System.AppDomainInitializer
' Casts to numeric types
int32;cast(100.34, int);100
byte;cast(100L,byte);100
' Cast of reference type to value type
int32;cast(objectinta, int);100
double;cast(icomparablea, double);100.25
object;cast(ValueTypeStructA, Valuetype);Tests.TestStruct
' Cast of reference type to reference type
object;cast(objectstringa, string);System.string
object;cast(ExceptionA, ArgumentException);System.ArgumentException
'	Reference type to unimplemented interface
object;cast(ExceptionNull, IComparable);System.void
'	interface to class
object;cast(IComparableString, string);System.string
'	class to interface
object;cast(IComparableNull, Icloneable);System.void
'	System.delegate to delegate type
object;cast(delegateANull, AppDomainInitializer);System.void
'	System.delegate to implemented interface
object;cast(delegateANull, ICloneable);System.void
'	System.delegate to concrete delegate
object;cast(delegateANull,AppDomainInitializer);system.void
'	Concrete delegate to implemented interface
object;cast(DelegateA, ICloneable);System.AppDomainInitializer
'	System.array to array type
object;cast(ArrayA, string[]);System.string[]
'	System.array to implemented interface
object;cast(ArrayA, ICloneable);System.string[]
'	Interface to System.Array
object;cast(ICloneableArray, Array);System.string[]
'	Interface to array
object;cast(ICloneableArray, string[]);System.string[]
'	Cast of one array to another
'		simple case
object;cast(stringarr, object[]);System.string[]
'		to implemented interface
object;cast(stringarr, IComparable[]);System.string[]
'		to base type
' *** Allowed but produces InvalidCastException; c# does same thing.... System.object;cast(stringarr, object[]);System.string[]
'	With global type
object;cast(Encodinga, System.text.Encoding);System.text.asciiencoding
object;cast(Encodinga, System.text.ASciiEncoding);System.text.asciiencoding
object;cast(AsciiEncodingArr, System.text.encoding[]);System.text.encoding[]
' Enums
int32;cast(DayOfWeek.Friday, int);5
byte;cast(DayOfWeek.Friday, byte);5
double;cast(DayOfWeek.Friday, double);5.0
object;cast(DayofWeek.friday,object);System.DayOfWeek
object;cast(5, DayOfWeek);System.DayOfWeek
object;cast(5.0, DayOfWeek);System.DayOfWeek
int32;cast(cast(cast(DayofWeek.Tuesday, object), DayOfWeek), int);2
int32;cast(cast(DayofWeek.Tuesday, object), int);2
' Casts to same CLR data type (should not emit a conv opcode)
int32;cast(uint32.maxvalue, int);-1
uint32;cast(-1, uint);4294967295
int64;cast(uint64.maxvalue, long);-1
uint64;cast(-1L, ulong);18446744073709551615
' Casts that use explicit overloaded cast operator
byte;cast(decimala, byte);100
int32;cast(decimala, int);100
single;cast(decimalb, single);0.25
decimal;cast(100.25, decimal);100.25
' Casts that use implicit overloaded cast operator
decimal;cast('a', decimal);97
decimal;cast(-100, decimal);-100
decimal;cast(bytea, decimal);50

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The GNU Lesser General Public License (LGPLv3)


Written By
Web Developer
Canada Canada
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions