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

Side by Side Diff: mojo/public/tools/bindings/pylib/mojom/generate/module.py

Issue 615063003: Mojo cpp bindings: support Clone() for structs and arrays which don't contain handles. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 2 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
OLDNEW
1 # Copyright 2013 The Chromium Authors. All rights reserved. 1 # Copyright 2013 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 # This module's classes provide an interface to mojo modules. Modules are 5 # This module's classes provide an interface to mojo modules. Modules are
6 # collections of interfaces and structs to be used by mojo ipc clients and 6 # collections of interfaces and structs to be used by mojo ipc clients and
7 # servers. 7 # servers.
8 # 8 #
9 # A simple interface would be created this way: 9 # A simple interface would be created this way:
10 # module = mojom.generate.module.Module('Foo') 10 # module = mojom.generate.module.Module('Foo')
(...skipping 403 matching lines...) Expand 10 before | Expand all | Expand 10 after
414 def IsAnyHandleKind(kind): 414 def IsAnyHandleKind(kind):
415 return (IsNonInterfaceHandleKind(kind) or 415 return (IsNonInterfaceHandleKind(kind) or
416 IsInterfaceKind(kind) or 416 IsInterfaceKind(kind) or
417 IsInterfaceRequestKind(kind)) 417 IsInterfaceRequestKind(kind))
418 418
419 419
420 def IsMoveOnlyKind(kind): 420 def IsMoveOnlyKind(kind):
421 return IsObjectKind(kind) or IsAnyHandleKind(kind) 421 return IsObjectKind(kind) or IsAnyHandleKind(kind)
422 422
423 423
424 def IsCloneableKind(kind):
425 def ContainsHandles(kind, visited_kinds):
426 if kind in visited_kinds:
427 # No need to examine the kind again.
428 return False
429 visited_kinds.add(kind)
430 if IsAnyHandleKind(kind):
431 return True
432 if IsAnyArrayKind(kind):
433 return ContainsHandles(kind.kind, visited_kinds)
434 if IsStructKind(kind):
435 for field in kind.fields:
436 if ContainsHandles(field.kind, visited_kinds):
437 return True
438 return False
439
440 return not ContainsHandles(kind, set())
441
442
424 def HasCallbacks(interface): 443 def HasCallbacks(interface):
425 for method in interface.methods: 444 for method in interface.methods:
426 if method.response_parameters != None: 445 if method.response_parameters != None:
427 return True 446 return True
428 return False 447 return False
429 448
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698