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

Method VisitExpressionBinary

avida-core/source/script/cSemanticASTVisitor.cc:368–494  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

366
367
368void cSemanticASTVisitor::VisitExpressionBinary(cASTExpressionBinary& node)
369{
370 node.GetLeft()->Accept(*this);
371 node.GetRight()->Accept(*this);
372
373 switch (node.GetOperator()) {
374 case TOKEN(IDX_OPEN):
375 switch (node.GetLeft()->GetType().type) {
376 case TYPE(ARRAY):
377 case TYPE(MATRIX):
378 case TYPE(STRING):
379 checkCast(node.GetRight()->GetType(), TYPEINFO(INT));
380 break;
381
382 case TYPE(DICT):
383 case TYPE(RUNTIME):
384 break;
385
386 case TYPE(OBJECT_REF):
387 if (m_obj_assign) break;
388
389 default:
390 SEMANTIC_ERROR(UNDEFINED_TYPE_OP, mapToken(node.GetOperator()), mapType(node.GetLeft()->GetType()));
391 break;
392 }
393 node.SetType(m_obj_assign ? TYPEINFO(OBJECT_REF) : TYPEINFO(RUNTIME));
394 break;
395 case TOKEN(ARR_RANGE):
396 checkCast(node.GetLeft()->GetType(), TYPEINFO(INT));
397 checkCast(node.GetRight()->GetType(), TYPEINFO(INT));
398 node.SetType(TYPE(ARRAY));
399 break;
400 case TOKEN(ARR_EXPAN):
401 checkCast(node.GetRight()->GetType(), TYPEINFO(INT));
402 node.SetType(TYPE(ARRAY));
403 break;
404
405 case TOKEN(OP_BIT_AND):
406 case TOKEN(OP_BIT_OR):
407 {
408 bool valid_types = true;
409 if (!validBitwiseType(node.GetLeft()->GetType())) {
410 valid_types = false;
411 SEMANTIC_ERROR(UNDEFINED_TYPE_OP, mapToken(node.GetOperator()), mapType(node.GetLeft()->GetType()));
412 }
413 if (!validBitwiseType(node.GetRight()->GetType())) {
414 valid_types = false;
415 SEMANTIC_ERROR(UNDEFINED_TYPE_OP, mapToken(node.GetOperator()), mapType(node.GetRight()->GetType()));
416 }
417
418 if (valid_types) node.SetType(getConsensusType(node.GetLeft()->GetType(), node.GetRight()->GetType()));
419 }
420 break;
421
422 case TOKEN(OP_LOGIC_AND):
423 case TOKEN(OP_LOGIC_OR):
424 checkCast(node.GetLeft()->GetType(), TYPEINFO(BOOL));
425 checkCast(node.GetRight()->GetType(), TYPEINFO(BOOL));

Callers

nothing calls this directly

Calls 7

AcceptMethod · 0.80
GetLeftMethod · 0.80
GetRightMethod · 0.80
SetCompareTypeMethod · 0.80
GetOperatorMethod · 0.45
GetTypeMethod · 0.45
SetTypeMethod · 0.45

Tested by

no test coverage detected