• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2017, The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #include "instructions.h"
18 
19 #include <iostream>
20 
21 #include "visitor.h"
22 
23 namespace android {
24 namespace spirit {
25 
IdRef(Instruction * inst)26 IdRef::IdRef(Instruction *inst) : mId(inst->getId()), mInstruction(inst) {}
27 
accept(IVisitor * v)28 void Instruction::accept(IVisitor *v) { v->visit(this); }
29 
decorate(Decoration decor)30 DecorateInst *Instruction::decorate(Decoration decor) {
31   if (mCodeAndCount.mOpCode == OpDecorate) {
32     return nullptr;
33   }
34 
35   DecorateInst *decorInst = new DecorateInst(this, decor);
36 
37   mDecorations.push_back(decorInst);
38 
39   return decorInst;
40 }
41 
memberDecorate(int member,Decoration decor)42 MemberDecorateInst *Instruction::memberDecorate(int member, Decoration decor) {
43   if (mCodeAndCount.mOpCode != OpTypeStruct) {
44     std::cerr << "OpMemberDecorate applied to non-OpTypeStruct instructions\n";
45     return nullptr;
46   }
47 
48   MemberDecorateInst *decorInst = new MemberDecorateInst(this, member, decor);
49 
50   mDecorations.push_back(decorInst);
51 
52   return decorInst;
53 }
54 
55 } // namespace spirit
56 } // namespace android
57