Re: ECF parsing issues

Eric Bezault <ericb-D6Qt/9opevxWk0Htik3J/[email protected]> Tue, 18 Aug 2009 19:12:11 +0200
Newsgroups gmane.comp.lang.eiffel.gobo.general
Message-ID <[email protected]>
Hi Sitsofe,

> When I serialize and then deserialize (I was
> trying to build a cache to speed up parsing of different classes that
> are part of the same project) an ET_SYSTEM subsequent parsing throws up
> the following warning:
> 
> [GIAAA] internal error.
> ----
> 
> I've put a testcase up on
> http://sucs.org/~sits/test/gobo/20090817/ecf_testcase.zip . There is a
> gobo directory in there too that includes changes I've made to gobo
> libraries (one is a known inverted assertion, another is the disabling
> of a failing precondition that I'm unclear about and the final piece are
> changes to do silent redirection when certain clusters (base.ecf,
> time.ecf) are loaded in an attempt to parse more ecf files without
> changing them so much).
> 
> To compile I've been doing
> ec -freeze -config ise.ecf
> as test.ecf cannot be made to work without the earlier gobo changes
> quietly doing redirection (but it must be used when using gobo parsing).
> Additionally test.xace no longer works as I don't yet know how to update
> it to include ise serialisation libraries.
> 
> Any help (including workarounds on how to make .ecf parsing just use the
> first target) is appreciated.

I noticed a typo in you class TEST:

109	a_class := a_system.class_by_name ( "TEST" )
110	a_class.process ( a_system.implementation_checker )
111	a_deserialized_system ?= deserialize ( serialize ( a_system ) )
112	a_class := a_system.class_by_name ( "TEST" )
113	a_class.process ( a_deserialized_system.implementation_checker )

In line 112, it should be:

	a_class := a_deserialized_system.class_by_name ( "TEST" )


The Gobo classes have indeed not been designed to work in
combination with serialization. They use direct equality tests
with once objects. But when these objects get serialized/deserialized
of course the equality does not hold anymore.

For this particular problem that you got, you will have
to replace routine `is_unknown' in class ET_CLASS by:

is_unknown: BOOLEAN is
		-- Is current class an "*UNKNOWN*" class?
		-- This class does not conform to any other class,
		-- not even itself.
	do
		Result := group /= Void and then group.is_unknown
	ensure
		definition: Result = (group /= Void and then group.is_unknown)
	end

-- 
Eric Bezault
mailto:ericb-D6Qt/9opevxWk0Htik3J/[email protected]
http://www.gobosoft.com


------------------------------------

To Post a message, send it to:   [email protected]
To Unsubscribe, send a blank message to: [email protected]! Groups Links

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/gobo-eiffel/

<*> Your email settings:
    Individual Email | Traditional

<*> To change settings online go to:
    http://groups.yahoo.com/group/gobo-eiffel/join
    (Yahoo! ID required)

<*> To change settings via email:
    mailto:[email protected] 
    mailto:[email protected]

<*> To unsubscribe from this group, send an email to:
    [email protected]

<*> Your use of Yahoo! Groups is subject to:
    http://docs.yahoo.com/info/terms/