Variable¶
Variable is a symbol node representing a variable declaration.
Declaration¶
Syntax¶
Variable(symbol_table parent_symtab, identifier name, identifier* dependencies,
intent intent, expr? symbolic_value, expr? value, storage_type storage,
ttype type, symbol type_declaration,
abi abi, access access, presence presence, bool value_attr)
Arguments¶
parent_symtab
integer id of the parent symbol table that contains the variable
name
the name of the variable
dependencies
other symbols that this variable depends on; must all be defined
in the parent_symtab
intent
specifies intent (Local, intent(in)
, intent(inout)
, etc.)
symbolic_value
the optional symbolic expression to initialize the variable
(e.g. 2+3+4+x
), this value must be compile time, but it is not necessarily a
constant (e.g., can contain binary operations, other variables, etc.)
value
the optional constant expression holding the compile time value
(e.g. 5
, or 5.5
), it is a compile time constant.
storage
whether Save
, Parameter
, Allocatable
type
the ttype of the variable
type_declaration
null for primitive types; for composite types that are
declared elsewhere in the program (struct, function, enum) it points to the
symbol that declares the type
abi
abi such as: Source
, Interface
, BindC
access
visibility: Public
, Private
presence
for parameters: Required
or Optional
value_attr
if true, this parameter has a value
attribute set
Return values¶
None.
Description¶
A Variable
node represents a declaration of any variable in the
program. It contais information about the type, visibility, compile-time value,
etc.
The type of the variable can be any of the primitive types like integer,
real, complex, pointers, arrays. In such cases, the type_declaration
member of
the Variable
is null.
Variable
might also have a non-primitive type like StructType
, or types for
classes, enums, and function pointers. Such types are not declared inline to the
Variable
node itself. In such cases, the type_declaration
member of
Variable
points to the symbol containing the declaration of the type.
Variable
represents declarations of variables. Var
nodes represent instances
of variables in code. To represent the use of a variable in an expression,
employ the ASR expr Var
node.
Examples¶
program expr2
integer :: x
x = (2+3)*5
print *, x
end program
ASR:
(TranslationUnit
(SymbolTable
1
{
expr2:
(Program
(SymbolTable
2
{
x:
(Variable
2
x
Local
()
()
Default
(Integer 4 [])
Source
Public
Required
.false.
()
)
})
expr2
[]
[(=
(Var 2 x)
(IntegerBinOp
(IntegerBinOp
(IntegerConstant 2 (Integer 4 []))
Add
(IntegerConstant 3 (Integer 4 []))
(Integer 4 [])
(IntegerConstant 5 (Integer 4 []))
)
Mul
(IntegerConstant 5 (Integer 4 []))
(Integer 4 [])
(IntegerConstant 25 (Integer 4 []))
)
()
)
(Print
()
[(Var 2 x)]
()
()
)]
)
})
[]
)