コード例 #1
0
ファイル: EmitContext.cs プロジェクト: kzyg/spark
        public IEmitVal EmitAttributeRef(
            MidAttributeDecl decl,
            IEmitBlock block,
            EmitEnv env)
        {
            if (env.ContainsKey(decl))
            {
                return(env.Lookup(decl, block));
            }

            IEmitVal attributeVal = null;

            if (decl.Exp != null)
            {
                attributeVal = block.Temp(
                    decl.Name.ToString(),
                    EmitExp(decl.Exp, block, env));
            }
            else
            {
                // \todo: This is a *huge* hack,
                // since we use @Constant attributes
                // to make various D3D constants visible... :(
                attributeVal = block.BuiltinApp(
                    EmitType(decl.Type, env),
                    decl.Name.ToString(),
                    null);
            }

            env.Insert(decl, (b) => attributeVal);
            return(attributeVal);
        }
コード例 #2
0
ファイル: EmitContext.cs プロジェクト: kzyg/spark
 private IEmitVal EmitExpImpl(
     MidVarRef exp,
     IEmitBlock block,
     EmitEnv env)
 {
     return(env.Lookup(exp.Var, block));
 }