/[eiffelstudio]/branches/eth/eve/Src/Eiffel/eiffel/AST/visitor/ast_feature_checker_generator.e
ViewVC logotype

Diff of /branches/eth/eve/Src/Eiffel/eiffel/AST/visitor/ast_feature_checker_generator.e

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 94982 by jasonw, Fri Mar 28 09:42:08 2014 UTC revision 94983 by jasonw, Fri May 2 11:05:28 2014 UTC
# Line 1  Line 1 
1  note  ´╗┐note
2          description: "Type checking and code generation of BYTE_NODE tree."          description: "Type checking and code generation of BYTE_NODE tree."
3          legal: "See notice at end of class."          legal: "See notice at end of class."
4          status: "See notice at end of class."          status: "See notice at end of class."
# Line 2426  feature {NONE} -- Visitor Line 2426  feature {NONE} -- Visitor
2426    
2427          process_string_as (l_as: STRING_AS)          process_string_as (l_as: STRING_AS)
2428                  local                  local
2429                          l_simplified_string_type: ANNOTATED_TYPE_A                          l_simplified_string_type: TYPE_A
2430                          l_is_string_32: BOOLEAN                          l_is_string_32: BOOLEAN
2431                          l_value: detachable STRING                          l_value: detachable STRING
2432                          class_id: INTEGER                          class_id: INTEGER
# Line 2435  feature {NONE} -- Visitor Line 2435  feature {NONE} -- Visitor
2435                  do                  do
2436                          if l_as.type = Void then                          if l_as.type = Void then
2437                                          -- Default to STRING_8, if not specified in the code.                                          -- Default to STRING_8, if not specified in the code.
2438                                  set_type (manifest_string_type, l_as)                                          l_simplified_string_type := manifest_string_type
2439                          else                  else
2440                                  check_type (l_as.type)                                  check_type (l_as.type)
2441                                    if attached last_type as l_last_type then
2442                                            l_simplified_string_type := l_last_type.duplicate
2443                                                    -- Manifest string are always frozen.
2444                                            l_simplified_string_type.set_frozen_mark
2445                                    end
2446                          end                          end
2447                          if attached {ANNOTATED_TYPE_A} last_type as l_last_type then                          if l_simplified_string_type /= Void then
2448                                          -- Constants are always of an attached type.                                          -- Constants are always of an attached type.
2449                                  l_simplified_string_type := l_last_type.as_attached_in (context.current_class)                                  l_simplified_string_type := l_simplified_string_type.as_attached_in (context.current_class)
                                         -- Manifest string are always frozen.  
                                 l_simplified_string_type.set_frozen_mark  
2450                                  set_type (l_simplified_string_type, l_as)                                  set_type (l_simplified_string_type, l_as)
2451                                  class_id := l_simplified_string_type.base_class.class_id                                  class_id := l_simplified_string_type.base_class.class_id
2452                                  if attached system.string_8_class as c then                                  if attached system.string_8_class as c then
# Line 5244  feature {NONE} -- Visitor Line 5247  feature {NONE} -- Visitor
5247                                                          l_conforming := True                                                          l_conforming := True
5248                                                  end                                                  end
5249                                                  if not l_conforming then                                                  if not l_conforming then
5250                                                                  -- Report a warning (when enabled) for the following cases in non-inherited code:                                                                  -- Report a warning (when enabled) except when comparing against
5251                                                                  --      exp1 = exp2                                                                  -- Void if the other operand is expanded. That is to say it will
5252                                                                  --      exp = ref                                                                  -- not report an error for `a = Void' and `Void = a' if
5253                                                                  --      ref = exp                                                                  -- `a' is not expanded.
5254                                                          if                                                          if
                                                                 context.current_class.is_warning_enabled (w_vweq) and then  
5255                                                                  current_feature.written_in = context.current_class.class_id and then                                                                  current_feature.written_in = context.current_class.class_id and then
5256                                                                  (l_left_type.is_expanded and then not l_right_type.conformance_type.is_formal or else                                                                  context.current_class.is_warning_enabled (w_vweq) and then
5257                                                                  l_right_type.is_expanded and then not l_left_type.conformance_type.is_formal)                                                                  ((l_left_type.is_none xor l_right_type.is_none) implies
5258                                                                            (l_left_type.is_expanded or l_right_type.is_expanded))
5259                                                          then                                                          then
5260                                                                  create l_vweq                                                                  create l_vweq
5261                                                                  context.init_error (l_vweq)                                                                  context.init_error (l_vweq)
# Line 6752  feature {NONE} -- Visitor Line 6755  feature {NONE} -- Visitor
6755                                  else                                  else
6756                                                  -- Type of a creation expression is always attached.                                                  -- Type of a creation expression is always attached.
6757                                          l_creation_type := l_creation_type.as_attached_in (context.current_class)                                          l_creation_type := l_creation_type.as_attached_in (context.current_class)
6758                                                    -- Type of a creation expression is frozen if this is a class type.
6759                                            if
6760                                                    attached {DEANCHORED_TYPE_A} l_creation_type as l_type and then
6761                                                    attached l_type.duplicate as l_duplicated_type
6762                                            then
6763                                                    l_duplicated_type.set_frozen_mark
6764                                                    l_creation_type := l_duplicated_type
6765                                            end
6766                                          set_type (l_creation_type, l_as)                                          set_type (l_creation_type, l_as)
6767                                          instantiator.dispatch (l_creation_type, context.current_class)                                          instantiator.dispatch (l_creation_type, context.current_class)
6768    
# Line 8468  feature {NONE} -- Visitor Line 8479  feature {NONE} -- Visitor
8479          process_export_clause_as (l_as: EXPORT_CLAUSE_AS)          process_export_clause_as (l_as: EXPORT_CLAUSE_AS)
8480                          -- Process `l_as'.                          -- Process `l_as'.
8481                  do                  do
8482                          safe_process (l_as.meaningful_content)                          safe_process (l_as.content)
8483                  end                  end
8484    
8485          process_undefine_clause_as (l_as: UNDEFINE_CLAUSE_AS)          process_undefine_clause_as (l_as: UNDEFINE_CLAUSE_AS)
8486                          -- Process `l_as'.                          -- Process `l_as'.
8487                  do                  do
8488                          safe_process (l_as.meaningful_content)                          safe_process (l_as.content)
8489                  end                  end
8490    
8491          process_redefine_clause_as (l_as: REDEFINE_CLAUSE_AS)          process_redefine_clause_as (l_as: REDEFINE_CLAUSE_AS)
8492                          -- Process `l_as'.                          -- Process `l_as'.
8493                  do                  do
8494                          safe_process (l_as.meaningful_content)                          safe_process (l_as.content)
8495                  end                  end
8496    
8497          process_select_clause_as (l_as: SELECT_CLAUSE_AS)          process_select_clause_as (l_as: SELECT_CLAUSE_AS)
8498                          -- Process `l_as'.                          -- Process `l_as'.
8499                  do                  do
8500                          safe_process (l_as.meaningful_content)                          safe_process (l_as.content)
8501                  end                  end
8502    
8503          process_formal_generic_list_as (l_as: FORMAL_GENERIC_LIST_AS)          process_formal_generic_list_as (l_as: FORMAL_GENERIC_LIST_AS)
# Line 8624  feature {NONE} -- Predefined types Line 8635  feature {NONE} -- Predefined types
8635          manifest_string_type: CL_TYPE_A          manifest_string_type: CL_TYPE_A
8636                          -- Actual string type                          -- Actual string type
8637                  once                  once
8638                          Result := system.string_8_class.compiled_class.actual_type                          Result := system.string_8_class.compiled_class.actual_type.duplicate
8639                                  -- Manifest string have a frozen type.                                  -- Manifest string have a frozen type.
8640                          Result.set_frozen_mark                          Result.set_frozen_mark
8641                  end                  end
# Line 8716  feature {NONE} -- Parenthesis alias Line 8727  feature {NONE} -- Parenthesis alias
8727                                                  -- Process call to bracket feature                                                  -- Process call to bracket feature
8728                                          l_is_qualified_call := is_qualified_call                                          l_is_qualified_call := is_qualified_call
8729                                          is_qualified_call := True                                          is_qualified_call := True
8730                                          process_call (constrained_target_type, Void, id_feature_name, alias_feature, p.meaningful_content, False, False, True, False, False)                                          process_call (constrained_target_type, Void, id_feature_name, alias_feature, p.parameters, False, False, True, False, False)
8731                                          is_qualified_call := l_is_qualified_call                                          is_qualified_call := l_is_qualified_call
8732                                          if error_level = l_error_level and then attached nested_b then                                          if error_level = l_error_level and then attached nested_b then
8733                                                  if l_is_multi_constraint then                                                  if l_is_multi_constraint then
# Line 10780  feature {NONE} -- Implementation: type v Line 10791  feature {NONE} -- Implementation: type v
10791                                          Result := a_last_type.actual_type.generics.i_th (l_formal_type.position)                                          Result := a_last_type.actual_type.generics.i_th (l_formal_type.position)
10792                                  end                                  end
10793                          end                          end
10794                          if l_formal_type /= Void and then attached {ANNOTATED_TYPE_A} a_type as l_annotated_type then                          if l_formal_type /= Void then
10795                                          -- Preserve attachment status of the original type.                                          -- Preserve attachment status of the original type.
10796                                  Result := Result.to_other_attachment (l_annotated_type).to_other_variant (l_annotated_type).to_other_separateness (l_annotated_type)                                  Result := Result.to_other_attachment (a_type).to_other_variant (a_type).to_other_separateness (a_type)
10797                          end                          end
10798                  ensure                  ensure
10799                          adapated_type_not_void: Result /= Void                          adapated_type_not_void: Result /= Void
# Line 10979  feature {NONE} -- Implementation: checki Line 10990  feature {NONE} -- Implementation: checki
10990                                          if l_warning = Void then                                          if l_warning = Void then
10991                                                  create l_warning.make (context.current_class, current_feature.enclosing_feature)                                                  create l_warning.make (context.current_class, current_feature.enclosing_feature)
10992                                          end                                          end
10993                                          l_warning.add_unused_local (names_heap.item (a_locals.key_for_iteration), l_local.type)                                          l_warning.add_unused_local (a_locals.key_for_iteration, l_local.type)
10994                                  end                                  end
10995                                  a_locals.forth                                  a_locals.forth
10996                          end                          end
# Line 11420  feature {NONE} -- Separateness Line 11431  feature {NONE} -- Separateness
11431                          end                          end
11432                  end                  end
11433    
11434          adapt_type_to_target (l: TYPE_A; t: TYPE_A; c: BOOLEAN; n: AST_EIFFEL)          adapt_type_to_target (l: detachable TYPE_A; t: TYPE_A; c: BOOLEAN; n: AST_EIFFEL)
11435                          -- Adapt separateness status of the last message type `l' of the AST node `n'                          -- Adapt separateness status of the last message type `l' of the AST node `n'
11436                          -- to the target of type `t' which has a controlled status `c'                          -- to the target of type `t' which has a controlled status `c'
11437                          -- and update `is_controlled' accordingly.                          -- and update `is_controlled' accordingly.
11438                    require
11439                            t_not_void: t /= Void
11440                  do                  do
11441                          if                          if
11442                                  t.is_separate and then                                  t.is_separate and then
11443                                  attached {ANNOTATED_TYPE_A} t as a and then                                  l /= Void and then not l.is_separate
                                 attached l and then  
                                 not l.is_separate  
11444                          then                          then
11445                                          -- Separate call is controlled if target is controlled                                          -- Separate call is controlled if target is controlled
11446                                          -- and message type is not separate.                                          -- and message type is not separate.
11447                                  is_controlled := c                                  is_controlled := c
11448                                  set_type (l.to_other_separateness (a), n)                                  set_type (l.to_other_separateness (t), n)
11449                          else                          else
11450                                  is_controlled := False                                  is_controlled := False
11451                                  set_type (l, n)                                  set_type (l, n)

Legend:
Removed from v.94982  
changed lines
  Added in v.94983

  ViewVC Help
Powered by ViewVC 1.1.23