Report a bug
If you spot a problem with this page, click here to create a Bugzilla issue.
Improve this page
Quickly fork, edit online, and submit a pull request for this page.
Requires a signed-in GitHub account. This works well for small changes.
If you'd like to make larger changes you may want to consider using
a local clone.
dmd.escape
Most of the logic to implement scoped pointers and scoped references is here.
Compiler implementation of the
D programming language.
Authors:
License:
Source escape.d
Documentation https://dlang.org/phobos/dmd_escape.html
- bool
checkArrayLiteralEscape(Scope*sc, ArrayLiteralExpae, boolgag); - Array literal is going to be allocated on the GC heap. Check its elements to see if any would escape by going on the heap.Parameters:
Scope* scused to determine current function and module ArrayLiteralExp aearray literal expression bool gagdo not print error messages Returns:true if any elements escaped - bool
checkAssocArrayLiteralEscape(Scope*sc, AssocArrayLiteralExpae, boolgag); - Associative array literal is going to be allocated on the GC heap. Check its elements to see if any would escape by going on the heap.Parameters:
Scope* scused to determine current function and module AssocArrayLiteralExp aeassociative array literal expression bool gagdo not print error messages Returns:true if any elements escaped - bool
checkParamArgumentEscape(Scope*sc, FuncDeclarationfdc, Parameterpar, Expressionarg, boolgag); - Function parameter
paris being initialized toarg, andparmay escape. Detect if scoped values can escape this way. Print error messages when these are detected.Parameters:Scope* scused to determine current function and module FuncDeclaration fdcfunction being called, null if called indirectly Parameter parfunction parameter (this if null) Expression arginitializer for param bool gagdo not print error messages Returns:true if pointers to the stack can escape via assignment - bool
checkParamArgumentReturn(Scope*sc, ExpressionfirstArg, Expressionarg, boolgag); - Function argument initializes a return parameter, and that parameter gets assigned to
firstArg. Essentially, treat asfirstArg=arg;Parameters:Scope* scused to determine current function and module Expression firstArgref argument through which argmay be assignedExpression arginitializer for parameter bool gagdo not print error messages Returns:true if assignment tofirstArgwould cause an error - bool
checkConstructorEscape(Scope*sc, CallExpce, boolgag); - Check struct constructor of the form s.this(args), by checking each return parameter to see if it gets assigned to s.Parameters:
Scope* scused to determine current function and module CallExp ceconstructor call of the form s.this(args) bool gagdo not print error messages Returns:true if construction would cause an escaping reference error - bool
checkAssignEscape(Scope*sc, Expressione, boolgag); - Given an AssignExp, determine if the lvalue will cause the contents of the rvalue to escape. Print error messages when these are detected. Infer scope attribute for the lvalue where possible, in order to eliminate the error.Parameters:
Scope* scused to determine current function and module Expression eAssignExp or CatAssignExp to check for any pointers to the stack bool gagdo not print error messages Returns:true if pointers to the stack can escape via assignment - bool
checkThrowEscape(Scope*sc, Expressione, boolgag); - Detect cases where pointers to the stack can escape the lifetime of the stack frame when throwing
e. Print error messages when these are detected.Parameters:Scope* scused to determine current function and module Expression eexpression to check for any pointers to the stack bool gagdo not print error messages Returns:true if pointers to the stack can escape - bool
checkNewEscape(Scope*sc, Expressione, boolgag); - Detect cases where pointers to the stack can escape the lifetime of the stack frame by being placed into a GC allocated object. Print error messages when these are detected.Parameters:
Scope* scused to determine current function and module Expression eexpression to check for any pointers to the stack bool gagdo not print error messages Returns:true if pointers to the stack can escape - bool
checkReturnEscape(Scope*sc, Expressione, boolgag); - Detect cases where pointers to the stack can escape the lifetime of the stack frame by returning
eby value. Print error messages when these are detected.Parameters:Scope* scused to determine current function and module Expression eexpression to check for any pointers to the stack bool gagdo not print error messages Returns:true if pointers to the stack can escape - bool
checkReturnEscapeRef(Scope*sc, Expressione, boolgag); - Detect cases where returning
eby ref can result in a reference to the stack being returned. Print error messages when these are detected.Parameters:Scope* scused to determine current function and module Expression eexpression to check bool gagdo not print error messages Returns:true if references to the stack can escape - void
findAllOuterAccessedVariables(FuncDeclarationfd, VarDeclarations*vars); - Find all variables accessed by this delegate that are in functions enclosing it.Parameters:
FuncDeclaration fdfunction VarDeclarations* varsarray to append found variables to - void
notMaybeScope(VarDeclarationv); - Turn off STC.maybescope for variable
v.This exists in order to find where STC.maybescope is getting turned off.Parameters:VarDeclaration vvariable - void
eliminateMaybeScopes(VarDeclaration[]array); - Have some variables that are maybescopes that were assigned values from other maybescope variables. Now that semantic analysis of the function is complete, we can finalize this by turning off maybescope for array elements that cannot be scope.
Scope Table va v => va v maybe maybe => scope scope scope scope => scope scope scope maybe => scope scope maybe scope => scope scope - - => - - - maybe => - - - scope => error error maybe - => scope - scope - => scope - Parameters:VarDeclaration[] arrayarray of variables that were assigned to from maybescope variables
Copyright © 1999-2019 by the D Language Foundation | Page generated by
Ddoc on Sun Sep 1 19:49:16 2019