Exemplo n.º 1
0
Arquivo: Scope.cs Projeto: plioi/rook
 public TypeMemberScope(IEnumerable <Binding> typeMembers)
 {
     members = new BindingDictionary();
     foreach (var member in typeMembers)
     {
         TryIncludeUniqueBinding(member);
     }
 }
Exemplo n.º 2
0
Arquivo: Scope.cs Projeto: plioi/rook
        public GlobalScope()
        {
            globals = new BindingDictionary();

            DataType @int = NamedType.Integer;
            DataType @bool = NamedType.Boolean;

            DataType integerOperation = NamedType.Function(new[] { @int, @int }, @int);
            DataType integerComparison = NamedType.Function(new[] { @int, @int }, @bool);
            DataType booleanOperation = NamedType.Function(new[] { @bool, @bool }, @bool);

            globals["<"] = integerComparison;
            globals["<="] = integerComparison;
            globals[">"] = integerComparison;
            globals[">="] = integerComparison;
            globals["=="] = integerComparison;
            globals["!="] = integerComparison;

            globals["+"] = integerOperation;
            globals["*"] = integerOperation;
            globals["/"] = integerOperation;
            globals["-"] = integerOperation;

            globals["&&"] = booleanOperation;
            globals["||"] = booleanOperation;
            globals["!"] = NamedType.Function(new[] { @bool }, @bool);

            var T = TypeVariable.CreateGeneric(); //TypeVariable 0
            var S = TypeVariable.CreateGeneric(); //TypeVariable 1

            var enumerableT = NamedType.Enumerable(T);
            var nullableT = NamedType.Nullable(T);
            var vectorT = NamedType.Vector(T);
            var enumerableS = NamedType.Enumerable(S);

            globals["??"] = NamedType.Function(new DataType[] { nullableT, T }, T);
            globals["Print"] = NamedType.Function(new[] { T }, NamedType.Void);
            globals["Nullable"] = NamedType.Function(new[] { T }, nullableT);
            globals["First"] = NamedType.Function(new[] { enumerableT }, T);
            globals["Take"] = NamedType.Function(new[] { enumerableT, @int }, enumerableT);
            globals["Skip"] = NamedType.Function(new[] { enumerableT, @int }, enumerableT);
            globals["Any"] = NamedType.Function(new[] { enumerableT }, @bool);
            globals["Count"] = NamedType.Function(new[] { enumerableT }, @int);
            globals["Select"] = NamedType.Function(new[] { enumerableT, NamedType.Function(new[] { T }, S) }, enumerableS);
            globals["Where"] = NamedType.Function(new[] { enumerableT, NamedType.Function(new[] { T }, @bool) }, enumerableT);
            globals["Each"] = NamedType.Function(new[] { vectorT }, enumerableT);
            globals[ReservedName.__index__] = NamedType.Function(new[] { vectorT, @int }, T);
            globals[ReservedName.__slice__] = NamedType.Function(new[] { vectorT, @int, @int }, vectorT);
            globals["Append"] = NamedType.Function(new DataType[] { vectorT, T }, vectorT);
            globals["With"] = NamedType.Function(new[] { vectorT, @int, T }, vectorT);
        }
Exemplo n.º 3
0
Arquivo: Scope.cs Projeto: plioi/rook
        public GlobalScope()
        {
            globals = new BindingDictionary();

            DataType @int  = NamedType.Integer;
            DataType @bool = NamedType.Boolean;

            DataType integerOperation  = NamedType.Function(new[] { @int, @int }, @int);
            DataType integerComparison = NamedType.Function(new[] { @int, @int }, @bool);
            DataType booleanOperation  = NamedType.Function(new[] { @bool, @bool }, @bool);

            globals["<"]  = integerComparison;
            globals["<="] = integerComparison;
            globals[">"]  = integerComparison;
            globals[">="] = integerComparison;
            globals["=="] = integerComparison;
            globals["!="] = integerComparison;

            globals["+"] = integerOperation;
            globals["*"] = integerOperation;
            globals["/"] = integerOperation;
            globals["-"] = integerOperation;

            globals["&&"] = booleanOperation;
            globals["||"] = booleanOperation;
            globals["!"]  = NamedType.Function(new[] { @bool }, @bool);

            var T = TypeVariable.CreateGeneric(); //TypeVariable 0
            var S = TypeVariable.CreateGeneric(); //TypeVariable 1

            var enumerableT = NamedType.Enumerable(T);
            var nullableT   = NamedType.Nullable(T);
            var vectorT     = NamedType.Vector(T);
            var enumerableS = NamedType.Enumerable(S);

            globals["??"]                   = NamedType.Function(new DataType[] { nullableT, T }, T);
            globals["Print"]                = NamedType.Function(new[] { T }, NamedType.Void);
            globals["Nullable"]             = NamedType.Function(new[] { T }, nullableT);
            globals["First"]                = NamedType.Function(new[] { enumerableT }, T);
            globals["Take"]                 = NamedType.Function(new[] { enumerableT, @int }, enumerableT);
            globals["Skip"]                 = NamedType.Function(new[] { enumerableT, @int }, enumerableT);
            globals["Any"]                  = NamedType.Function(new[] { enumerableT }, @bool);
            globals["Count"]                = NamedType.Function(new[] { enumerableT }, @int);
            globals["Select"]               = NamedType.Function(new[] { enumerableT, NamedType.Function(new[] { T }, S) }, enumerableS);
            globals["Where"]                = NamedType.Function(new[] { enumerableT, NamedType.Function(new[] { T }, @bool) }, enumerableT);
            globals["Each"]                 = NamedType.Function(new[] { vectorT }, enumerableT);
            globals[ReservedName.__index__] = NamedType.Function(new[] { vectorT, @int }, T);
            globals[ReservedName.__slice__] = NamedType.Function(new[] { vectorT, @int, @int }, vectorT);
            globals["Append"]               = NamedType.Function(new DataType[] { vectorT, T }, vectorT);
            globals["With"]                 = NamedType.Function(new[] { vectorT, @int, T }, vectorT);
        }
Exemplo n.º 4
0
Arquivo: Scope.cs Projeto: plioi/rook
 public TypeMemberScope(IEnumerable<Binding> typeMembers)
 {
     members = new BindingDictionary();
     foreach (var member in typeMembers)
         TryIncludeUniqueBinding(member);
 }
Exemplo n.º 5
0
Arquivo: Scope.cs Projeto: plioi/rook
 public ClassScope(Scope parent)
 {
     this.parent = parent;
     members = new BindingDictionary();
 }
Exemplo n.º 6
0
Arquivo: Scope.cs Projeto: plioi/rook
 public LocalScope(Scope parent)
 {
     this.parent = parent;
     locals  = new BindingDictionary();
 }
Exemplo n.º 7
0
Arquivo: Scope.cs Projeto: plioi/rook
 public ClassScope(Scope parent)
 {
     this.parent = parent;
     members     = new BindingDictionary();
 }
Exemplo n.º 8
0
Arquivo: Scope.cs Projeto: plioi/rook
 public LocalScope(Scope parent)
 {
     this.parent = parent;
     locals      = new BindingDictionary();
 }