Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(722)

Side by Side Diff: sandbox/linux/bpf_dsl/bpf_dsl.cc

Issue 438683004: bpf_dsl: support Switch/Case expressions (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Sync and resolve conflicts Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « sandbox/linux/bpf_dsl/bpf_dsl.h ('k') | sandbox/linux/bpf_dsl/bpf_dsl_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "sandbox/linux/bpf_dsl/bpf_dsl.h" 5 #include "sandbox/linux/bpf_dsl/bpf_dsl.h"
6 6
7 #include <errno.h> 7 #include <errno.h>
8 8
9 #include <limits> 9 #include <limits>
10 10
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
83 private: 83 private:
84 virtual ~IfThenResultExprImpl() {} 84 virtual ~IfThenResultExprImpl() {}
85 85
86 BoolExpr cond_; 86 BoolExpr cond_;
87 ResultExpr then_result_; 87 ResultExpr then_result_;
88 ResultExpr else_result_; 88 ResultExpr else_result_;
89 89
90 DISALLOW_COPY_AND_ASSIGN(IfThenResultExprImpl); 90 DISALLOW_COPY_AND_ASSIGN(IfThenResultExprImpl);
91 }; 91 };
92 92
93 class ConstBoolExprImpl : public internal::BoolExprImpl {
94 public:
95 ConstBoolExprImpl(bool value) : value_(value) {}
96
97 virtual ErrorCode Compile(SandboxBPF* sb,
98 ErrorCode true_ec,
99 ErrorCode false_ec) const OVERRIDE {
100 return value_ ? true_ec : false_ec;
101 }
102
103 private:
104 virtual ~ConstBoolExprImpl() {}
105
106 bool value_;
107
108 DISALLOW_COPY_AND_ASSIGN(ConstBoolExprImpl);
109 };
110
93 class PrimitiveBoolExprImpl : public internal::BoolExprImpl { 111 class PrimitiveBoolExprImpl : public internal::BoolExprImpl {
94 public: 112 public:
95 PrimitiveBoolExprImpl(int argno, 113 PrimitiveBoolExprImpl(int argno,
96 ErrorCode::ArgType is_32bit, 114 ErrorCode::ArgType is_32bit,
97 uint64_t mask, 115 uint64_t mask,
98 uint64_t value) 116 uint64_t value)
99 : argno_(argno), is_32bit_(is_32bit), mask_(mask), value_(value) {} 117 : argno_(argno), is_32bit_(is_32bit), mask_(mask), value_(value) {}
100 118
101 virtual ErrorCode Compile(SandboxBPF* sb, 119 virtual ErrorCode Compile(SandboxBPF* sb,
102 ErrorCode true_ec, 120 ErrorCode true_ec,
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
207 } 225 }
208 226
209 ResultExpr Error(int err) { 227 ResultExpr Error(int err) {
210 return ResultExpr(new const ErrorResultExprImpl(err)); 228 return ResultExpr(new const ErrorResultExprImpl(err));
211 } 229 }
212 230
213 ResultExpr Trap(Trap::TrapFnc trap_func, void* aux) { 231 ResultExpr Trap(Trap::TrapFnc trap_func, void* aux) {
214 return ResultExpr(new const TrapResultExprImpl(trap_func, aux)); 232 return ResultExpr(new const TrapResultExprImpl(trap_func, aux));
215 } 233 }
216 234
235 BoolExpr BoolConst(bool value) {
236 return BoolExpr(new const ConstBoolExprImpl(value));
237 }
238
217 BoolExpr operator!(const BoolExpr& cond) { 239 BoolExpr operator!(const BoolExpr& cond) {
218 return BoolExpr(new const NegateBoolExprImpl(cond)); 240 return BoolExpr(new const NegateBoolExprImpl(cond));
219 } 241 }
220 242
221 BoolExpr operator&&(const BoolExpr& lhs, const BoolExpr& rhs) { 243 BoolExpr operator&&(const BoolExpr& lhs, const BoolExpr& rhs) {
222 return BoolExpr(new const AndBoolExprImpl(lhs, rhs)); 244 return BoolExpr(new const AndBoolExprImpl(lhs, rhs));
223 } 245 }
224 246
225 BoolExpr operator||(const BoolExpr& lhs, const BoolExpr& rhs) { 247 BoolExpr operator||(const BoolExpr& lhs, const BoolExpr& rhs) {
226 return BoolExpr(new const OrBoolExprImpl(lhs, rhs)); 248 return BoolExpr(new const OrBoolExprImpl(lhs, rhs));
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
288 ErrorCode SandboxBPFDSLPolicy::InvalidSyscall(SandboxBPF* sb) const { 310 ErrorCode SandboxBPFDSLPolicy::InvalidSyscall(SandboxBPF* sb) const {
289 return InvalidSyscall()->Compile(sb); 311 return InvalidSyscall()->Compile(sb);
290 } 312 }
291 313
292 ResultExpr SandboxBPFDSLPolicy::Trap(Trap::TrapFnc trap_func, void* aux) { 314 ResultExpr SandboxBPFDSLPolicy::Trap(Trap::TrapFnc trap_func, void* aux) {
293 return bpf_dsl::Trap(trap_func, aux); 315 return bpf_dsl::Trap(trap_func, aux);
294 } 316 }
295 317
296 } // namespace bpf_dsl 318 } // namespace bpf_dsl
297 } // namespace sandbox 319 } // namespace sandbox
OLDNEW
« no previous file with comments | « sandbox/linux/bpf_dsl/bpf_dsl.h ('k') | sandbox/linux/bpf_dsl/bpf_dsl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698