Ejemplo n.º 1
0
 private void ConvertToDoubleIfNeeded(MiniType a, MiniType b)
 {
     if (a == MiniType.Double && b != MiniType.Double)
     {
         Emit("conv." + MiniType.Double.ToPrimitive());
     }
 }
Ejemplo n.º 2
0
 public VariableDeclaration(string name, IScope scope, MiniType type, LexLocation loc = null)
 {
     Name  = name;
     Scope = scope;
     scope.AddToScope(this);
     Type     = type;
     Location = loc;
 }
Ejemplo n.º 3
0
        public override MiniType GetResultType(MiniType typeA, MiniType typeB = MiniType.Unknown)
        {
            if (typeA == MiniType.Unknown || typeB == MiniType.Unknown)
            {
                throw new ArgumentException("You can't use this operator on this types.");
            }

            return(GetResultTypeBinary(typeA, typeB));
        }
Ejemplo n.º 4
0
        public override bool CanUse(MiniType typeA, MiniType typeB)
        {
            switch (typeA)
            {
            case MiniType.Double:
                return(typeB == MiniType.Double || typeB == MiniType.Int);
            }

            return(typeA == typeB);
        }
Ejemplo n.º 5
0
        public override bool CanUse(MiniType typeA)
        {
            switch (typeA)
            {
            case MiniType.Int:
                return(true);
            }

            return(false);
        }
Ejemplo n.º 6
0
        public override bool CanUse(MiniType typeA, MiniType typeB = MiniType.Unknown)
        {
            switch (typeA)
            {
            case MiniType.Int:
                return(typeB == MiniType.Int || typeB == MiniType.Double);

            case MiniType.Double:
                return(typeB == MiniType.Int || typeB == MiniType.Double);
            }

            return(false);
        }
Ejemplo n.º 7
0
        public static string ToPrimitive(this MiniType type)
        {
            switch (type)
            {
            case MiniType.Int:
                return("i4");

            case MiniType.Double:
                return("r8");

            case MiniType.Bool:
                return("i4");
            }

            return(null);
        }
Ejemplo n.º 8
0
        public static string ToCil(this MiniType type)
        {
            switch (type)
            {
            case MiniType.Int:
                return("int32");

            case MiniType.Double:
                return("float64");

            case MiniType.Bool:
                return("bool");

            case MiniType.String:
                return("string");
            }

            return(null);
        }
Ejemplo n.º 9
0
        public static string ToCSharp(this MiniType type)
        {
            switch (type)
            {
            case MiniType.Int:
                return("Int32");

            case MiniType.Double:
                return("Double");

            case MiniType.Bool:
                return("Boolean");

            case MiniType.String:
                return("String");
            }

            return(null);
        }
Ejemplo n.º 10
0
        private TypeNode CreateValue()
        {
            var      value = ValueStack[ValueStack.Depth - 1];
            MiniType type  = value.token.ConvertToType();
            string   val   = value.val;

            TypeNode result;

            if (type == MiniType.Unknown)
            {
                result = Error("Cannot use provided type: {0}", value.token).typeNode;
                StartRecovery();
            }
            else
            {
                result = new Value(type, val, CurrentLocationSpan);
            }

            return(result);
        }
Ejemplo n.º 11
0
 public Value(MiniType type, string val, LexLocation loc = null)
 {
     Type     = type;
     Val      = val;
     Location = loc;
 }
Ejemplo n.º 12
0
 public override MiniType GetResultType(MiniType type)
 {
     return(type);
 }
Ejemplo n.º 13
0
 public Operator WithResultType(MiniType typeA, MiniType typeB = MiniType.Unknown)
 {
     Type = GetResultType(typeA, typeB);
     return(this);
 }
Ejemplo n.º 14
0
 public abstract bool CanUse(MiniType typeA);
Ejemplo n.º 15
0
 public abstract MiniType GetResultType(MiniType type);
Ejemplo n.º 16
0
            public static Operator Create(Token token, MiniType typeA, LexLocation location = null)
            {
                var operatorToken = token.ConvertToOperator(true);

                return(Create(operatorToken, location).WithResultType(typeA));
            }
Ejemplo n.º 17
0
 public abstract bool CanUse(MiniType typeA, MiniType typeB = MiniType.Unknown);
Ejemplo n.º 18
0
 public static bool CanUse(Token token, MiniType typeA)
 {
     lastToken    = token.ConvertToOperator(true);
     lastOperator = CreateFromToken(lastToken);
     return(lastOperator.CanUse(typeA));
 }
Ejemplo n.º 19
0
 public static Operator Create(Token token, MiniType typeA, LexLocation location = null) =>
 Factory.Create(token, typeA, location);
Ejemplo n.º 20
0
 public static bool CanUse(Token token, MiniType typeA) => Factory.CanUse(token, typeA);
Ejemplo n.º 21
0
 public override MiniType GetResultTypeBinary(MiniType typeA, MiniType typeB)
 {
     return(typeA == MiniType.Double || typeB == MiniType.Double ? MiniType.Double : MiniType.Int);
 }
Ejemplo n.º 22
0
 public override bool CanUse(MiniType typeA)
 {
     return(typeA != MiniType.Unknown);
 }
Ejemplo n.º 23
0
 public abstract MiniType GetResultTypeBinary(MiniType typeA, MiniType typeB);
Ejemplo n.º 24
0
 public abstract MiniType GetResultType(MiniType typeA, MiniType typeB = MiniType.Unknown);
Ejemplo n.º 25
0
 public override bool CanUse(MiniType typeA, MiniType typeB = MiniType.Unknown)
 {
     return(typeA == MiniType.Bool && typeB == MiniType.Bool);
 }
Ejemplo n.º 26
0
 public override bool CanUse(MiniType typeA)
 {
     return(false);
 }
Ejemplo n.º 27
0
 public override MiniType GetResultTypeBinary(MiniType typeA, MiniType typeB)
 {
     return(MiniType.Bool);
 }
Ejemplo n.º 28
0
 public override MiniType GetResultType(MiniType typeA, MiniType typeB = MiniType.Unknown)
 {
     return(MiniType.Unknown);
 }