Ejemplo n.º 1
0
        private ElaValue Read(ElaExpression exp, string str)
        {
            switch (exp.Type)
            {
            case ElaNodeType.ListLiteral:
            {
                var n   = (ElaListLiteral)exp;
                var arr = new ElaValue[n.Values.Count];

                for (var i = 0; i < arr.Length; i++)
                {
                    arr[i] = Read(n.Values[i], str);
                }

                return(new ElaValue(ElaList.FromEnumerable(arr)));
            }

            case ElaNodeType.TupleLiteral:
            {
                var n   = (ElaTupleLiteral)exp;
                var arr = new ElaValue[n.Parameters.Count];

                for (var i = 0; i < arr.Length; i++)
                {
                    arr[i] = Read(n.Parameters[i], str);
                }

                return(new ElaValue(new ElaTuple(arr)));
            }

            case ElaNodeType.RecordLiteral:
            {
                var n   = (ElaRecordLiteral)exp;
                var arr = new ElaRecordField[n.Fields.Count];

                for (var i = 0; i < arr.Length; i++)
                {
                    var f = n.Fields[i];
                    arr[i] = new ElaRecordField(f.FieldName, Read(f.FieldValue, str));
                }

                return(new ElaValue(new ElaRecord(arr)));
            }

            case ElaNodeType.Primitive:
            {
                var n = (ElaPrimitive)exp;

                switch (n.Value.LiteralType)
                {
                case ElaTypeCode.Integer:
                    return(new ElaValue(n.Value.AsInteger()));

                case ElaTypeCode.Single:
                    return(new ElaValue(n.Value.AsReal()));

                case ElaTypeCode.Double:
                    return(new ElaValue(n.Value.AsDouble()));

                case ElaTypeCode.Long:
                    return(new ElaValue(n.Value.AsLong()));

                case ElaTypeCode.Char:
                    return(new ElaValue(n.Value.AsChar()));

                case ElaTypeCode.Boolean:
                    return(new ElaValue(n.Value.AsBoolean()));

                case ElaTypeCode.String:
                    return(new ElaValue(n.Value.AsString()));

                default:
                    throw Fail(str);
                }
            }

            case ElaNodeType.UnitLiteral:
                return(new ElaValue(ElaUnit.Instance));

            default:
                throw Fail(str);
            }
        }
Ejemplo n.º 2
0
        private ElaRecord ConvertToRecord()
        {
            var fields = new ElaRecordField[Map.Count];
            var c = 0;

            foreach (var kv in Map)
                fields[c++] = new ElaRecordField(kv.Key.ToString(), kv.Value);

            return new ElaRecord(fields);
        }