320 /* B 1.2 - Constants */ |
324 /* B 1.2 - Constants */ |
321 /*********************/ |
325 /*********************/ |
322 /******************************/ |
326 /******************************/ |
323 /* B 1.2.1 - Numeric Literals */ |
327 /* B 1.2.1 - Numeric Literals */ |
324 /******************************/ |
328 /******************************/ |
|
329 #define sizeoftype(symbol) get_sizeof_datatype_c::getsize(symbol) |
|
330 |
|
331 void *fill_candidate_datatypes_c::handle_any_integer(symbol_c *symbol) { |
|
332 int calc_size; |
|
333 |
|
334 calc_size = sizeoftype(symbol); |
|
335 if (calc_size <= sizeoftype(&search_constant_type_c::bool_type_name)) |
|
336 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::bool_type_name, &search_constant_type_c::safebool_type_name); |
|
337 if (calc_size <= sizeoftype(&search_constant_type_c::byte_type_name)) |
|
338 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::byte_type_name, &search_constant_type_c::safebyte_type_name); |
|
339 if (calc_size <= sizeoftype(&search_constant_type_c::word_type_name)) |
|
340 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::word_type_name, &search_constant_type_c::safeword_type_name); |
|
341 if (calc_size <= sizeoftype(&search_constant_type_c::dword_type_name)) |
|
342 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::dword_type_name, &search_constant_type_c::safedword_type_name); |
|
343 if (calc_size <= sizeoftype(&search_constant_type_c::lword_type_name)) |
|
344 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::lword_type_name, &search_constant_type_c::safelword_type_name); |
|
345 |
|
346 if (calc_size < sizeoftype(&search_constant_type_c::sint_type_name)) |
|
347 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::sint_type_name, &search_constant_type_c::safesint_type_name); |
|
348 if (calc_size < sizeoftype(&search_constant_type_c::int_type_name)) |
|
349 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::int_type_name, &search_constant_type_c::safeint_type_name); |
|
350 if (calc_size < sizeoftype(&search_constant_type_c::dint_type_name)) |
|
351 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::dint_type_name, &search_constant_type_c::safedint_type_name); |
|
352 if (calc_size < sizeoftype(&search_constant_type_c::lint_type_name)) |
|
353 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::lint_type_name, &search_constant_type_c::safelint_type_name); |
|
354 if (calc_size <= sizeoftype(&search_constant_type_c::usint_type_name)) |
|
355 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::usint_type_name, &search_constant_type_c::safeusint_type_name); |
|
356 if (calc_size <= sizeoftype(&search_constant_type_c::uint_type_name)) |
|
357 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::uint_type_name, &search_constant_type_c::safeuint_type_name); |
|
358 if (calc_size <= sizeoftype(&search_constant_type_c::udint_type_name)) |
|
359 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::udint_type_name, &search_constant_type_c::safeudint_type_name); |
|
360 if (calc_size <= sizeoftype(&search_constant_type_c::ulint_type_name)) |
|
361 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::ulint_type_name, &search_constant_type_c::safeulint_type_name); |
|
362 return NULL; |
|
363 } |
|
364 |
|
365 |
|
366 |
|
367 |
325 void *fill_candidate_datatypes_c::visit(real_c *symbol) { |
368 void *fill_candidate_datatypes_c::visit(real_c *symbol) { |
326 int calc_size; |
369 int calc_size; |
327 |
370 |
328 calc_size = sizeoftype(symbol); |
371 calc_size = sizeoftype(symbol); |
329 if (calc_size <= sizeoftype(&search_constant_type_c::real_type_name)) |
372 if (calc_size <= sizeoftype(&search_constant_type_c::real_type_name)) |
330 add_datatype_to_candidate_list(symbol, &search_constant_type_c::real_type_name); |
373 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::real_type_name, &search_constant_type_c::safereal_type_name); |
331 if (calc_size <= sizeoftype(&search_constant_type_c::lreal_type_name)) |
374 if (calc_size <= sizeoftype(&search_constant_type_c::lreal_type_name)) |
332 add_datatype_to_candidate_list(symbol, &search_constant_type_c::lreal_type_name); |
375 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::lreal_type_name, &search_constant_type_c::safelreal_type_name); |
333 if (debug) std::cout << "ANY_REAL [" << symbol->candidate_datatypes.size() << "]" << std::endl; |
376 if (debug) std::cout << "ANY_REAL [" << symbol->candidate_datatypes.size() << "]" << std::endl; |
334 return NULL; |
377 return NULL; |
335 } |
378 } |
336 |
379 |
|
380 |
|
381 |
337 void *fill_candidate_datatypes_c::visit(integer_c *symbol) { |
382 void *fill_candidate_datatypes_c::visit(integer_c *symbol) { |
|
383 handle_any_integer(symbol); |
|
384 if (debug) std::cout << "ANY_INT [" << symbol->candidate_datatypes.size()<< "]" << std::endl; |
|
385 return NULL; |
|
386 } |
|
387 |
|
388 |
|
389 void *fill_candidate_datatypes_c::visit(neg_real_c *symbol) { |
338 int calc_size; |
390 int calc_size; |
339 |
391 |
340 calc_size = sizeoftype(symbol); |
392 calc_size = sizeoftype(symbol); |
341 if (calc_size <= sizeoftype(&search_constant_type_c::bool_type_name)) |
393 if (calc_size <= sizeoftype(&search_constant_type_c::real_type_name)) |
342 add_datatype_to_candidate_list(symbol, &search_constant_type_c::bool_type_name); |
394 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::real_type_name, &search_constant_type_c::safereal_type_name); |
343 if (calc_size <= sizeoftype(&search_constant_type_c::byte_type_name)) |
395 if (calc_size <= sizeoftype(&search_constant_type_c::lreal_type_name)) |
344 add_datatype_to_candidate_list(symbol, &search_constant_type_c::byte_type_name); |
396 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::lreal_type_name, &search_constant_type_c::safelreal_type_name); |
345 if (calc_size <= sizeoftype(&search_constant_type_c::word_type_name)) |
|
346 add_datatype_to_candidate_list(symbol, &search_constant_type_c::word_type_name); |
|
347 if (calc_size <= sizeoftype(&search_constant_type_c::dword_type_name)) |
|
348 add_datatype_to_candidate_list(symbol, &search_constant_type_c::dword_type_name); |
|
349 if (calc_size <= sizeoftype(&search_constant_type_c::lword_type_name)) |
|
350 add_datatype_to_candidate_list(symbol, &search_constant_type_c::lword_type_name); |
|
351 |
|
352 if (calc_size < sizeoftype(&search_constant_type_c::sint_type_name)) |
|
353 add_datatype_to_candidate_list(symbol, &search_constant_type_c::sint_type_name); |
|
354 if (calc_size < sizeoftype(&search_constant_type_c::int_type_name)) |
|
355 add_datatype_to_candidate_list(symbol, &search_constant_type_c::int_type_name); |
|
356 if (calc_size < sizeoftype(&search_constant_type_c::dint_type_name)) |
|
357 add_datatype_to_candidate_list(symbol, &search_constant_type_c::dint_type_name); |
|
358 if (calc_size < sizeoftype(&search_constant_type_c::lint_type_name)) |
|
359 add_datatype_to_candidate_list(symbol, &search_constant_type_c::lint_type_name); |
|
360 if (calc_size <= sizeoftype(&search_constant_type_c::usint_type_name)) |
|
361 add_datatype_to_candidate_list(symbol, &search_constant_type_c::usint_type_name); |
|
362 if (calc_size <= sizeoftype(&search_constant_type_c::uint_type_name)) |
|
363 add_datatype_to_candidate_list(symbol, &search_constant_type_c::uint_type_name); |
|
364 if (calc_size <= sizeoftype(&search_constant_type_c::udint_type_name)) |
|
365 add_datatype_to_candidate_list(symbol, &search_constant_type_c::udint_type_name); |
|
366 if (calc_size <= sizeoftype(&search_constant_type_c::ulint_type_name)) |
|
367 add_datatype_to_candidate_list(symbol, &search_constant_type_c::ulint_type_name); |
|
368 if (debug) std::cout << "ANY_INT [" << symbol->candidate_datatypes.size()<< "]" << std::endl; |
|
369 return NULL; |
|
370 } |
|
371 |
|
372 void *fill_candidate_datatypes_c::visit(neg_real_c *symbol) { |
|
373 if (sizeoftype(symbol) <= sizeoftype(&search_constant_type_c::real_type_name)) |
|
374 add_datatype_to_candidate_list(symbol, &search_constant_type_c::real_type_name); |
|
375 add_datatype_to_candidate_list(symbol, &search_constant_type_c::lreal_type_name); |
|
376 if (debug) std::cout << "neg ANY_REAL [" << symbol->candidate_datatypes.size() << "]" << std::endl; |
397 if (debug) std::cout << "neg ANY_REAL [" << symbol->candidate_datatypes.size() << "]" << std::endl; |
377 return NULL; |
398 return NULL; |
378 } |
399 } |
|
400 |
379 |
401 |
380 void *fill_candidate_datatypes_c::visit(neg_integer_c *symbol) { |
402 void *fill_candidate_datatypes_c::visit(neg_integer_c *symbol) { |
381 int calc_size; |
403 int calc_size; |
382 |
404 |
383 calc_size = sizeoftype(symbol); |
405 calc_size = sizeoftype(symbol); |
384 if (calc_size <= sizeoftype(&search_constant_type_c::int_type_name)) |
406 if (calc_size <= sizeoftype(&search_constant_type_c::int_type_name)) |
385 add_datatype_to_candidate_list(symbol, &search_constant_type_c::int_type_name); |
407 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::int_type_name, &search_constant_type_c::safeint_type_name); |
386 if (calc_size <= sizeoftype(&search_constant_type_c::sint_type_name)) |
408 if (calc_size <= sizeoftype(&search_constant_type_c::sint_type_name)) |
387 add_datatype_to_candidate_list(symbol, &search_constant_type_c::sint_type_name); |
409 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::sint_type_name, &search_constant_type_c::safesint_type_name); |
388 if (calc_size <= sizeoftype(&search_constant_type_c::dint_type_name)) |
410 if (calc_size <= sizeoftype(&search_constant_type_c::dint_type_name)) |
389 add_datatype_to_candidate_list(symbol, &search_constant_type_c::dint_type_name); |
411 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::dint_type_name, &search_constant_type_c::safedint_type_name); |
390 if (calc_size <= sizeoftype(&search_constant_type_c::lint_type_name)) |
412 if (calc_size <= sizeoftype(&search_constant_type_c::lint_type_name)) |
391 add_datatype_to_candidate_list(symbol, &search_constant_type_c::lint_type_name); |
413 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::lint_type_name, &search_constant_type_c::safelint_type_name); |
392 if (debug) std::cout << "neg ANY_INT [" << symbol->candidate_datatypes.size() << "]" << std::endl; |
414 if (debug) std::cout << "neg ANY_INT [" << symbol->candidate_datatypes.size() << "]" << std::endl; |
393 return NULL; |
415 return NULL; |
394 } |
416 } |
395 |
417 |
|
418 |
396 void *fill_candidate_datatypes_c::visit(binary_integer_c *symbol) { |
419 void *fill_candidate_datatypes_c::visit(binary_integer_c *symbol) { |
397 int calc_size; |
420 handle_any_integer(symbol); |
398 |
|
399 calc_size = sizeoftype(symbol); |
|
400 if (calc_size <= sizeoftype(&search_constant_type_c::bool_type_name)) |
|
401 add_datatype_to_candidate_list(symbol, &search_constant_type_c::bool_type_name); |
|
402 if (calc_size <= sizeoftype(&search_constant_type_c::byte_type_name)) |
|
403 add_datatype_to_candidate_list(symbol, &search_constant_type_c::byte_type_name); |
|
404 if (calc_size <= sizeoftype(&search_constant_type_c::word_type_name)) |
|
405 add_datatype_to_candidate_list(symbol, &search_constant_type_c::word_type_name); |
|
406 if (calc_size <= sizeoftype(&search_constant_type_c::dword_type_name)) |
|
407 add_datatype_to_candidate_list(symbol, &search_constant_type_c::dword_type_name); |
|
408 if (calc_size <= sizeoftype(&search_constant_type_c::lword_type_name)) |
|
409 add_datatype_to_candidate_list(symbol, &search_constant_type_c::lword_type_name); |
|
410 |
|
411 if (calc_size < sizeoftype(&search_constant_type_c::sint_type_name)) |
|
412 add_datatype_to_candidate_list(symbol, &search_constant_type_c::sint_type_name); |
|
413 if (calc_size < sizeoftype(&search_constant_type_c::int_type_name)) |
|
414 add_datatype_to_candidate_list(symbol, &search_constant_type_c::int_type_name); |
|
415 if (calc_size < sizeoftype(&search_constant_type_c::dint_type_name)) |
|
416 add_datatype_to_candidate_list(symbol, &search_constant_type_c::dint_type_name); |
|
417 if (calc_size < sizeoftype(&search_constant_type_c::lint_type_name)) |
|
418 add_datatype_to_candidate_list(symbol, &search_constant_type_c::lint_type_name); |
|
419 if (calc_size <= sizeoftype(&search_constant_type_c::usint_type_name)) |
|
420 add_datatype_to_candidate_list(symbol, &search_constant_type_c::usint_type_name); |
|
421 if (calc_size <= sizeoftype(&search_constant_type_c::uint_type_name)) |
|
422 add_datatype_to_candidate_list(symbol, &search_constant_type_c::uint_type_name); |
|
423 if (calc_size <= sizeoftype(&search_constant_type_c::udint_type_name)) |
|
424 add_datatype_to_candidate_list(symbol, &search_constant_type_c::udint_type_name); |
|
425 if (calc_size <= sizeoftype(&search_constant_type_c::ulint_type_name)) |
|
426 add_datatype_to_candidate_list(symbol, &search_constant_type_c::ulint_type_name); |
|
427 if (debug) std::cout << "ANY_INT [" << symbol->candidate_datatypes.size()<< "]" << std::endl; |
421 if (debug) std::cout << "ANY_INT [" << symbol->candidate_datatypes.size()<< "]" << std::endl; |
428 return NULL; |
422 return NULL; |
429 } |
423 } |
430 |
424 |
|
425 |
|
426 |
431 void *fill_candidate_datatypes_c::visit(octal_integer_c *symbol) { |
427 void *fill_candidate_datatypes_c::visit(octal_integer_c *symbol) { |
432 int calc_size; |
428 handle_any_integer(symbol); |
433 |
|
434 calc_size = sizeoftype(symbol); |
|
435 if (calc_size <= sizeoftype(&search_constant_type_c::bool_type_name)) |
|
436 add_datatype_to_candidate_list(symbol, &search_constant_type_c::bool_type_name); |
|
437 if (calc_size <= sizeoftype(&search_constant_type_c::byte_type_name)) |
|
438 add_datatype_to_candidate_list(symbol, &search_constant_type_c::byte_type_name); |
|
439 if (calc_size <= sizeoftype(&search_constant_type_c::word_type_name)) |
|
440 add_datatype_to_candidate_list(symbol, &search_constant_type_c::word_type_name); |
|
441 if (calc_size <= sizeoftype(&search_constant_type_c::dword_type_name)) |
|
442 add_datatype_to_candidate_list(symbol, &search_constant_type_c::dword_type_name); |
|
443 if (calc_size <= sizeoftype(&search_constant_type_c::lword_type_name)) |
|
444 add_datatype_to_candidate_list(symbol, &search_constant_type_c::lword_type_name); |
|
445 |
|
446 if (calc_size < sizeoftype(&search_constant_type_c::sint_type_name)) |
|
447 add_datatype_to_candidate_list(symbol, &search_constant_type_c::sint_type_name); |
|
448 if (calc_size < sizeoftype(&search_constant_type_c::int_type_name)) |
|
449 add_datatype_to_candidate_list(symbol, &search_constant_type_c::int_type_name); |
|
450 if (calc_size < sizeoftype(&search_constant_type_c::dint_type_name)) |
|
451 add_datatype_to_candidate_list(symbol, &search_constant_type_c::dint_type_name); |
|
452 if (calc_size < sizeoftype(&search_constant_type_c::lint_type_name)) |
|
453 add_datatype_to_candidate_list(symbol, &search_constant_type_c::lint_type_name); |
|
454 if (calc_size <= sizeoftype(&search_constant_type_c::usint_type_name)) |
|
455 add_datatype_to_candidate_list(symbol, &search_constant_type_c::usint_type_name); |
|
456 if (calc_size <= sizeoftype(&search_constant_type_c::uint_type_name)) |
|
457 add_datatype_to_candidate_list(symbol, &search_constant_type_c::uint_type_name); |
|
458 if (calc_size <= sizeoftype(&search_constant_type_c::udint_type_name)) |
|
459 add_datatype_to_candidate_list(symbol, &search_constant_type_c::udint_type_name); |
|
460 if (calc_size <= sizeoftype(&search_constant_type_c::ulint_type_name)) |
|
461 add_datatype_to_candidate_list(symbol, &search_constant_type_c::ulint_type_name); |
|
462 if (debug) std::cout << "ANY_INT [" << symbol->candidate_datatypes.size()<< "]" << std::endl; |
429 if (debug) std::cout << "ANY_INT [" << symbol->candidate_datatypes.size()<< "]" << std::endl; |
463 return NULL; |
430 return NULL; |
464 } |
431 } |
465 |
432 |
|
433 |
|
434 |
466 void *fill_candidate_datatypes_c::visit(hex_integer_c *symbol) { |
435 void *fill_candidate_datatypes_c::visit(hex_integer_c *symbol) { |
467 int calc_size; |
436 handle_any_integer(symbol); |
468 |
|
469 calc_size = sizeoftype(symbol); |
|
470 if (calc_size <= sizeoftype(&search_constant_type_c::bool_type_name)) |
|
471 add_datatype_to_candidate_list(symbol, &search_constant_type_c::bool_type_name); |
|
472 if (calc_size <= sizeoftype(&search_constant_type_c::byte_type_name)) |
|
473 add_datatype_to_candidate_list(symbol, &search_constant_type_c::byte_type_name); |
|
474 if (calc_size <= sizeoftype(&search_constant_type_c::word_type_name)) |
|
475 add_datatype_to_candidate_list(symbol, &search_constant_type_c::word_type_name); |
|
476 if (calc_size <= sizeoftype(&search_constant_type_c::dword_type_name)) |
|
477 add_datatype_to_candidate_list(symbol, &search_constant_type_c::dword_type_name); |
|
478 if (calc_size <= sizeoftype(&search_constant_type_c::lword_type_name)) |
|
479 add_datatype_to_candidate_list(symbol, &search_constant_type_c::lword_type_name); |
|
480 |
|
481 if (calc_size < sizeoftype(&search_constant_type_c::sint_type_name)) |
|
482 add_datatype_to_candidate_list(symbol, &search_constant_type_c::sint_type_name); |
|
483 if (calc_size < sizeoftype(&search_constant_type_c::int_type_name)) |
|
484 add_datatype_to_candidate_list(symbol, &search_constant_type_c::int_type_name); |
|
485 if (calc_size < sizeoftype(&search_constant_type_c::dint_type_name)) |
|
486 add_datatype_to_candidate_list(symbol, &search_constant_type_c::dint_type_name); |
|
487 if (calc_size < sizeoftype(&search_constant_type_c::lint_type_name)) |
|
488 add_datatype_to_candidate_list(symbol, &search_constant_type_c::lint_type_name); |
|
489 if (calc_size <= sizeoftype(&search_constant_type_c::usint_type_name)) |
|
490 add_datatype_to_candidate_list(symbol, &search_constant_type_c::usint_type_name); |
|
491 if (calc_size <= sizeoftype(&search_constant_type_c::uint_type_name)) |
|
492 add_datatype_to_candidate_list(symbol, &search_constant_type_c::uint_type_name); |
|
493 if (calc_size <= sizeoftype(&search_constant_type_c::udint_type_name)) |
|
494 add_datatype_to_candidate_list(symbol, &search_constant_type_c::udint_type_name); |
|
495 if (calc_size <= sizeoftype(&search_constant_type_c::ulint_type_name)) |
|
496 add_datatype_to_candidate_list(symbol, &search_constant_type_c::ulint_type_name); |
|
497 if (debug) std::cout << "ANY_INT [" << symbol->candidate_datatypes.size()<< "]" << std::endl; |
437 if (debug) std::cout << "ANY_INT [" << symbol->candidate_datatypes.size()<< "]" << std::endl; |
498 return NULL; |
438 return NULL; |
499 } |
439 } |
500 |
440 |
|
441 |
501 // SYM_REF2(integer_literal_c, type, value) |
442 // SYM_REF2(integer_literal_c, type, value) |
|
443 /* |
|
444 * integer_literal: |
|
445 * integer_type_name '#' signed_integer |
|
446 * | integer_type_name '#' binary_integer |
|
447 * | integer_type_name '#' octal_integer |
|
448 * | integer_type_name '#' hex_integer |
|
449 */ |
502 void *fill_candidate_datatypes_c::visit(integer_literal_c *symbol) { |
450 void *fill_candidate_datatypes_c::visit(integer_literal_c *symbol) { |
503 symbol->value->accept(*this); |
451 symbol->value->accept(*this); |
504 if (search_in_candidate_datatype_list(symbol->type, symbol->value->candidate_datatypes) >= 0) |
452 if (search_in_candidate_datatype_list(symbol->type, symbol->value->candidate_datatypes) >= 0) |
505 add_datatype_to_candidate_list(symbol, symbol->type); |
453 add_datatype_to_candidate_list(symbol, symbol->type); |
506 if (debug) std::cout << "INT_LITERAL [" << symbol->candidate_datatypes.size() << "]\n"; |
454 if (debug) std::cout << "INT_LITERAL [" << symbol->candidate_datatypes.size() << "]\n"; |