Beispiel #1
0
        public void Visit(NodeLet let)
        {
            var sym = walker.Current.Lookup(let.Name);
            sym.userdata = BuildAlloca(builder, TypeConverter.ToLLVMTy(let.Ty.Raw, context), let.Name);

            let.value.Accept(this);
            var value = Pop().value;

            BuildStore(builder, value, (LLVMValueRef)sym.userdata);
        }
Beispiel #2
0
 public void Visit(NodeLet let)
 {
     log.Error(let.Span, "A let binding is not valid in this placement. Perhaps you meant to put it in a function?");
 }
Beispiel #3
0
 public void Visit(NodeLet let)
 {
     throw new NotImplementedException();
 }
Beispiel #4
0
        public void Visit(NodeLet let)
        {
            let.value.Accept(this);
            var valueTy = Pop();

            if (let.Ty is InferTyRef)
            {
                let.spTy = valueTy.Spanned();
                (walker.Current.Lookup(let.Name) as VarSymbol).ty = valueTy;
            }

            if (let.Ty.Raw != valueTy)
                log.Error(let.spTy.span, "Type mismatch: Cannot assign {0} to {1}.", valueTy, let.Ty);
        }
Beispiel #5
0
 public void Visit(NodeLet let)
 {
     ResolveTy(let.spTy);
     let.value.Accept(this);
 }
Beispiel #6
0
 public void Visit(NodeLet let)
 {
     symbols.InsertVar(let.Name, let.Ty);
     let.value.Accept(this);
 }
Beispiel #7
0
 public void Visit(NodeLet let)
 {
     Write("'let' ");
     Write(let.Name);
     if (!(let.Ty is InferTyRef))
     {
         Write(" ':' ");
         Write(let.Ty.ToString());
     }
     Write(" '=' ");
     let.value.Accept(this);
 }