MCPcopy Create free account
hub / github.com/devosoft/avida / VisitAssignment

Method VisitAssignment

avida-core/source/script/cDirectInterpretASTVisitor.cc:108–156  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

106
107
108void cDirectInterpretASTVisitor::VisitAssignment(cASTAssignment& node)
109{
110 cSymbolTable* symtbl = node.IsVarGlobal() ? m_global_symtbl : m_cur_symtbl;
111 int sp = node.IsVarGlobal() ? 0 : m_sp;
112 int var_id = node.GetVarID();
113
114 node.GetExpression()->Accept(*this);
115
116 switch (symtbl->GetVariableType(var_id).type) {
117 case TYPE(BOOL): m_call_stack[sp + var_id].value.as_bool = asBool(m_rtype, m_rvalue, node); break;
118 case TYPE(CHAR): m_call_stack[sp + var_id].value.as_char = asChar(m_rtype, m_rvalue, node); break;
119 case TYPE(FLOAT): m_call_stack[sp + var_id].value.as_float = asFloat(m_rtype, m_rvalue, node); break;
120 case TYPE(INT): m_call_stack[sp + var_id].value.as_int = asInt(m_rtype, m_rvalue, node); break;
121
122 case TYPE(OBJECT_REF):
123 m_call_stack[sp + var_id].value.as_nobj->RemoveReference();
124 m_call_stack[sp + var_id].value.as_nobj = asNativeObject(symtbl->GetVariableType(var_id).info, m_rtype, m_rvalue, node);
125
126 case TYPE(VAR):
127 m_call_stack[sp + var_id].value = m_rvalue;
128 m_call_stack[sp + var_id].type = m_rtype;
129 break;
130
131 case TYPE(ARRAY):
132 m_call_stack[sp + var_id].value.as_array->RemoveReference();
133 m_call_stack[sp + var_id].value.as_array = asArray(m_rtype, m_rvalue, node);
134 break;
135
136
137 case TYPE(DICT):
138 m_call_stack[sp + var_id].value.as_dict->RemoveReference();
139 m_call_stack[sp + var_id].value.as_dict = asDict(m_rtype, m_rvalue, node);
140 break;
141
142
143 case TYPE(MATRIX):
144 m_call_stack[sp + var_id].value.as_matrix->RemoveReference();
145 m_call_stack[sp + var_id].value.as_matrix = asMatrix(m_rtype, m_rvalue, node);
146 break;
147
148 case TYPE(STRING):
149 delete m_call_stack[sp + var_id].value.as_string;
150 m_call_stack[sp + var_id].value.as_string = asString(m_rtype, m_rvalue, node);
151 break;
152
153 default:
154 INTERPRET_ERROR(INTERNAL);
155 }
156}
157
158
159void cDirectInterpretASTVisitor::VisitArgumentList(cASTArgumentList& node)

Callers

nothing calls this directly

Calls 5

AcceptMethod · 0.80
IsVarGlobalMethod · 0.45
GetVarIDMethod · 0.45
GetExpressionMethod · 0.45
RemoveReferenceMethod · 0.45

Tested by

no test coverage detected