public static LuaExpression Create(SPAGS.Expression agsExpr)
{
switch (agsExpr.Type)
{
case SPAGS.ExpressionType.AllocateArray:
break;
case SPAGS.ExpressionType.AllocStringBuffer:
break;
case SPAGS.ExpressionType.AllocStruct:
break;
case SPAGS.ExpressionType.ArrayIndex:
break;
case SPAGS.ExpressionType.Attribute:
break;
case SPAGS.ExpressionType.BinaryOperator:
SPAGS.Expression.BinaryOperator binop = (SPAGS.Expression.BinaryOperator)agsExpr;
LuaExpression left = LuaExpression.Create(binop.Left);
LuaExpression right = LuaExpression.Create(binop.Right);
LuaBinaryOperatorType binopType;
switch (binop.Token.Type)
{
case SPAGS.TokenType.Add:
binopType = LuaBinaryOperatorType.Add;
break;
case SPAGS.TokenType.BitwiseAnd:
return LuaBitLibrary.Bit_BAnd.MakeCall(left, right);
case SPAGS.TokenType.BitwiseLeftShift:
return LuaBitLibrary.Bit_LShift.MakeCall(left, right);
case SPAGS.TokenType.BitwiseOr:
return LuaBitLibrary.Bit_BOr.MakeCall(left, right);
case SPAGS.TokenType.BitwiseRightShift:
return LuaBitLibrary.Bit_RShift.MakeCall(left, right);
case SPAGS.TokenType.BitwiseXor:
return LuaBitLibrary.Bit_BXor.MakeCall(left, right);
case SPAGS.TokenType.Divide:
binopType = LuaBinaryOperatorType.Divide;
break;
case SPAGS.TokenType.IsEqualTo:
binopType = LuaBinaryOperatorType.IsEqualTo;
break;
case SPAGS.TokenType.IsGreaterThan:
binopType = LuaBinaryOperatorType.IsGreaterThan;
break;
case SPAGS.TokenType.IsGreaterThanOrEqualTo:
binopType = LuaBinaryOperatorType.IsGreaterThanOrEqualTo;
break;
case SPAGS.TokenType.IsLessThan:
binopType = LuaBinaryOperatorType.IsLessThan;
break;
case SPAGS.TokenType.IsLessThanOrEqualTo:
binopType = LuaBinaryOperatorType.IsLessThanOrEqualTo;
break;
case SPAGS.TokenType.IsNotEqualTo:
binopType = LuaBinaryOperatorType.IsNotEqualTo;
break;
case SPAGS.TokenType.LogicalAnd:
binopType = LuaBinaryOperatorType.LogicalAnd;
break;
case SPAGS.TokenType.LogicalOr:
binopType = LuaBinaryOperatorType.LogicalOr;
break;
case SPAGS.TokenType.Modulus:
binopType = LuaBinaryOperatorType.Modulus;
break;
case SPAGS.TokenType.Multiply:
binopType = LuaBinaryOperatorType.Multiply;
break;
case SPAGS.TokenType.Subtract:
binopType = LuaBinaryOperatorType.Subtract;
break;
}
break;
case SPAGS.ExpressionType.Call:
break;
case SPAGS.ExpressionType.CharLiteral:
break;
case SPAGS.ExpressionType.Constant:
break;
case SPAGS.ExpressionType.Custom:
break;
case SPAGS.ExpressionType.EnumValue:
SPAGS.Expression.EnumValue enumValue = (SPAGS.Expression.EnumValue)agsExpr;
if (enumValue.TheValue.OwnerType.Name == "bool")
{
return (enumValue.TheValue.Value == 0) ? False : True;
}
return new GlobalAccess(enumValue.TheValue.Name);
case SPAGS.ExpressionType.Field:
break;
case SPAGS.ExpressionType.FloatLiteral:
return new NumberLiteral(((SPAGS.Expression.FloatLiteral)agsExpr).Value);
case SPAGS.ExpressionType.Function:
break;
case SPAGS.ExpressionType.IntegerLiteral:
return new IntegerLiteral(((SPAGS.Expression.IntegerLiteral)agsExpr).Value);
case SPAGS.ExpressionType.Method:
break;
case SPAGS.ExpressionType.Null:
return Nil;
case SPAGS.ExpressionType.StringLiteral:
return new StringLiteral(((SPAGS.Expression.StringLiteral)agsExpr).Value);
case SPAGS.ExpressionType.StructType:
break;
case SPAGS.ExpressionType.UnaryOperator:
SPAGS.Expression.UnaryOperator unop = (SPAGS.Expression.UnaryOperator)agsExpr;
switch (unop.Token.Type)
{
case SPAGS.TokenType.Subtract:
break;
case SPAGS.TokenType.LogicalNot:
break;
}
break;
case SPAGS.ExpressionType.Variable:
break;
}
return null;
}